수색…


비고

주의 사항 : DT[where, select|update|do, by] 구문은 data.table의 열을 사용하여 작업하는 데 사용됩니다.

  • "where"부분이 i 인수입니다.
  • "select | update | do"부분은 j 인수입니다.

이 두 인수는 일반적으로 이름 대신 위치에 의해 전달됩니다.

각 그룹 내의 행 선택

# example data
DT <- data.table(Titanic)

각 성별에 대해 가장 높은 생존 수를 가진 행을 원한다고 가정 해보십시오.

DT[Survived == "Yes", .SD[ N == max(N) ], by=Sex]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

.SD 는 각 Sex 과 관련된 데이터의 하위 집합입니다. 우리는이 조건을 충족시키는 행에 대해이 부분 집합을 더 하위 집합으로 지정합니다. 속도가 중요하다면 대신 에 eddi가 제안한 방법을 사용 하십시오 .

DT[ DT[Survived == "Yes", .I[ N == max(N) ], by=Sex]$V1 ]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

함정

코드의 마지막 줄에서 .I 는 전체 data.table의 행 번호를 나타냅니다. 그러나 어떤이없는 경우이 사실이 아니다 by :

DT[ Survived == "Yes", .I]

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

DT[ Survived == "Yes", .I, by=Sex]$I

# 17 18 19 20 25 26 27 28 21 22 23 24 29 30 31 32

그룹 선택

# example data
DT = data.table(Titanic)

두 번째 클래스 만보고 싶다고 가정 해 보겠습니다.

DT[ Class == "2nd" ]

#    Class    Sex   Age Survived   N
# 1:   2nd   Male Child       No   0
# 2:   2nd Female Child       No   0
# 3:   2nd   Male Adult       No 154
# 4:   2nd Female Adult       No  13
# 5:   2nd   Male Child      Yes  11
# 6:   2nd Female Child      Yes  13
# 7:   2nd   Male Adult      Yes  14
# 8:   2nd Female Adult      Yes  80

여기서는 i , where 절을 사용하여 데이터의 하위 집합을 작성합니다.

조건별로 그룹 선택

# example data
DT = data.table(Titanic)

대다수가 살아남은 경우에만 각 클래스를보고 싶다고 가정 해 보겠습니다.

DT[, if (sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) .SD, by=Class]

#    Class    Sex   Age Survived   N
# 1:   1st   Male Child       No   0
# 2:   1st Female Child       No   0
# 3:   1st   Male Adult       No 118
# 4:   1st Female Adult       No   4
# 5:   1st   Male Child      Yes   5
# 6:   1st Female Child      Yes   1
# 7:   1st   Male Adult      Yes  57
# 8:   1st Female Adult      Yes 140

여기서 우리는 조건이 충족되는 경우에만 .SD 데이터의 하위 집합을 반환합니다. 대안은

DT[, .SD[ sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) ], by=Class]

그러나 이것은 때때로 느린 것으로 입증되었습니다.



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