수색…


비고

주의 사항 : 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 은 편리합니다 ...

  1. 그룹의 행 수,

    DT[Species == "setosa", .N]
    
    # 50
    
  2. 또는 모든 그룹의 행 수를 계산하거나,

    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
    
  3. 또는 특정 수의 행을 가진 그룹을 찾을 수 있습니다.

    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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow