data.table
요약 통계 계산
수색…
비고
주의 사항 : DT[where, select|update|do, by]
구문은 data.table의 열을 사용하여 작업하는 데 사용됩니다.
- "where"부분이
i
인수입니다. - "select | update | do"부분은
j
인수입니다.
이 두 인수는 일반적으로 이름 대신 위치에 의해 전달됩니다.
그룹 단위로 행 계산하기
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
.N
사용
.N
in j
는 서브 세트의 행 수를 저장합니다. 데이터를 탐색 할 때 .N
은 편리합니다 ...
그룹의 행 수,
DT[Species == "setosa", .N] # 50
또는 모든 그룹의 행 수를 계산하거나,
DT[, .N, by=.(Species, Bin)] # Species Bin N # 1: setosa (4,6] 50 # 2: versicolor (6,8] 20 # 3: versicolor (4,6] 30 # 4: virginica (6,8] 41 # 5: virginica (4,6] 9
또는 특정 수의 행을 가진 그룹을 찾을 수 있습니다.
DT[, .N, by=.(Species, Bin)][ N < 25 ] # Species Bin N # 1: versicolor (6,8] 20 # 2: virginica (4,6] 9
누락 된 그룹 처리
그러나 위의 수가 0 인 그룹이 누락되었습니다. 중요하다면 기지에서 table
을 사용할 수 있습니다 :
DT[, data.table(table(Species, Bin))][ N < 25 ]
# Species Bin N
# 1: virginica (4,6] 9
# 2: setosa (6,8] 0
# 3: versicolor (6,8] 20
또는 모든 그룹에 가입 할 수 있습니다.
DT[CJ(Species=Species, Bin=Bin, unique=TRUE), on=c("Species","Bin"), .N, by=.EACHI][N < 25]
# Species Bin N
# 1: setosa (6,8] 0
# 2: versicolor (6,8] 20
# 3: virginica (4,6] 9
.N
에 대한 .N
:
- 이 예제에서는 하위 집합의 크기를 나타내는
j
에서.N
을 사용합니다. -
i
에서는 총 행 수를 나타냅니다.
맞춤 요약
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
관측 수와 함께 Sepal.Length
대한 summary
함수 출력을 Sepal.Length
가정 Sepal.Length
.
DT[, c(
as.list(summary(Sepal.Length)),
N = .N
), by=.(Species, Bin)]
# Species Bin Min. 1st Qu. Median Mean 3rd Qu. Max. N
# 1: setosa (4,6] 4.3 4.8 5.0 5.006 5.2 5.8 50
# 2: versicolor (6,8] 6.1 6.2 6.4 6.450 6.7 7.0 20
# 3: versicolor (4,6] 4.9 5.5 5.6 5.593 5.8 6.0 30
# 4: virginica (6,8] 6.1 6.4 6.7 6.778 7.2 7.9 41
# 5: virginica (4,6] 4.9 5.7 5.8 5.722 5.9 6.0 9
우리는 j
열의 목록을 만들어야합니다. 대개 일부는 c
, as.list
및 .
계속 진행하는 올바른 방법을 알기에 충분합니다.
요약 통계를 새 열로 할당
요약 테이블을 만드는 대신 새 열에 요약 통계를 저장할 수 있습니다. 우리는 :=
평소와 같이 사용할 수 있습니다. 예를 들어,
DT[, is_big := .N >= 25, by=.(Species, Bin)]
함정
손쉬운 데이터
열 이름을 파싱하고 싶다면
x.Length/x.Width
의 평균을 취합니다. 여기서x
는 10 개의 다른 값을 취합니다.
아마도 열 이름에 포함 된 데이터를 조사하고있는 것이므로 잘못된 생각입니다. 깔끔한 데이터를 읽고 긴 형식으로 바꿉니다.
행 방향 요약
데이터 프레임과 데이터 테이블은 행이 관측치에 해당하고 열이 변수에 해당하는 표 형식 데이터에 맞게 잘 설계되었습니다. 행에 대해 요약하려는 경우
각 행에 대해 열의 표준 편차를 찾습니다.
아마 매트릭스 나 다른 데이터 포맷을 사용해야 할 것입니다.
요약 기능
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
summary
은 요약 통계를 탐색하는 데 유용합니다. 같은 직접 사용 외에도 summary(DT)
, 그것은 또한 편리하여 당 그룹을 적용 할 수 있습니다 split
:
lapply(split(DT, by=c("Species", "Bin"), drop=TRUE, keep.by=FALSE), summary)
# $`setosa.(4,6]`
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# Min. :4.300 Min. :2.300 Min. :1.000 Min. :0.100
# 1st Qu.:4.800 1st Qu.:3.200 1st Qu.:1.400 1st Qu.:0.200
# Median :5.000 Median :3.400 Median :1.500 Median :0.200
# Mean :5.006 Mean :3.428 Mean :1.462 Mean :0.246
# 3rd Qu.:5.200 3rd Qu.:3.675 3rd Qu.:1.575 3rd Qu.:0.300
# Max. :5.800 Max. :4.400 Max. :1.900 Max. :0.600
#
# $`versicolor.(6,8]`
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# Min. :6.10 Min. :2.20 Min. :4.000 Min. :1.20
# 1st Qu.:6.20 1st Qu.:2.80 1st Qu.:4.400 1st Qu.:1.30
# Median :6.40 Median :2.90 Median :4.600 Median :1.40
# Mean :6.45 Mean :2.89 Mean :4.585 Mean :1.42
# 3rd Qu.:6.70 3rd Qu.:3.10 3rd Qu.:4.700 3rd Qu.:1.50
# Max. :7.00 Max. :3.30 Max. :5.000 Max. :1.70
#
# [...results truncated...]
제로 카운트 그룹을 포함 시키려면 split
drop=FALSE
로 설정하십시오.
여러 변수에 요약 함수 적용
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
그룹에 의해 모든 컬럼에 동일한 요약하는 기능을 적용하기 위해 사용할 수있는 lapply
및 .SD
DT[, lapply(.SD, median), by=.(Species, Bin)]
# Species Bin Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1: setosa (4,6] 5.0 3.4 1.50 0.2
# 2: versicolor (6,8] 6.4 2.9 4.60 1.4
# 3: versicolor (4,6] 5.6 2.7 4.05 1.3
# 4: virginica (6,8] 6.7 3.0 5.60 2.1
# 5: virginica (4,6] 5.8 2.7 5.00 1.9
우리의 열을 필터링 할 수 있습니다 .SD
와 .SDcols
인수를 :
DT[, lapply(.SD, median), by=.(Species, Bin), .SDcols="Petal.Length"]
# Species Bin Petal.Length
# 1: setosa (4,6] 1.50
# 2: versicolor (6,8] 4.60
# 3: versicolor (4,6] 4.05
# 4: virginica (6,8] 5.60
# 5: virginica (4,6] 5.00
다중 요약 기능
현재, 여러 함수에 대한 가장 간단한 확장은 아마도 :
DT[, unlist(recursive=FALSE, lapply(
.(med = median, iqr = IQR),
function(f) lapply(.SD, f)
)), by=.(Species, Bin), .SDcols=Petal.Length:Petal.Width]
# Species Bin med.Petal.Length med.Petal.Width iqr.Petal.Length iqr.Petal.Width
# 1: setosa (4,6] 1.50 0.2 0.175 0.100
# 2: versicolor (6,8] 4.60 1.4 0.300 0.200
# 3: versicolor (4,6] 4.05 1.3 0.525 0.275
# 4: virginica (6,8] 5.60 2.1 0.700 0.500
# 5: virginica (4,6] 5.00 1.9 0.200 0.200
Petal.Length.med
대신 med.Petal.Length
와 같은 이름을 사용하려면 순서를 변경하십시오.
DT[, unlist(recursive=FALSE, lapply(
.SD,
function(x) lapply(.(med = median, iqr = IQR), function(f) f(x))
)), by=.(Species, Bin), .SDcols=Petal.Length:Petal.Width]
# Species Bin Petal.Length.med Petal.Length.iqr Petal.Width.med Petal.Width.iqr
# 1: setosa (4,6] 1.50 0.175 0.2 0.100
# 2: versicolor (6,8] 4.60 0.300 1.4 0.200
# 3: versicolor (4,6] 4.05 0.525 1.3 0.275
# 4: virginica (6,8] 5.60 0.700 2.1 0.500
# 5: virginica (4,6] 5.00 0.200 1.9 0.200