your programing

레코드 수를 계산하고 data.table의 각 그룹 내에서 행 번호를 생성합니다.

lovepro 2020. 12. 30. 19:50
반응형

레코드 수를 계산하고 data.table의 각 그룹 내에서 행 번호를 생성합니다.


다음 data.table이 있습니다.

set.seed(1)
DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE))
    VAL
 1:   1
 2:   2
 3:   2
 4:   3
 5:   1
 6:   3
 7:   3
 8:   2
 9:   2
10:   1

각 번호 VAL 에서 :

  1. 레코드 / 행 수 계산
  2. 첫 번째, 두 번째, 세 번째 발생 등의 행 인덱스 (카운터)를 만듭니다.

결국 나는 결과를 원한다

    VAL COUNT IDX
 1:   1     3   1
 2:   2     4   1
 3:   2     4   2
 4:   3     3   1
 5:   1     3   2
 6:   3     3   2
 7:   3     3   3
 8:   2     4   3
 9:   2     4   4
10:   1     3   3

여기서 "COUNT"는 각 "VAL"에 대한 레코드 / 행 수이고 "IDX"는 각 "VAL"내의 행 인덱스입니다.

나는 함께 작동하도록 시도 whichlength사용 .I:

 dt[, list(COUNT = length(VAL == VAL[.I]), 
             IDX = which(which(VAL == VAL[.I]) == .I))]

그러나 이것은 .I인덱스가있는 벡터를 참조하는 것처럼 작동하지 않으므로 .I[]. 내부에서 .I[]다시 문제에 직면 했지만 행 인덱스가 없으며 data.table가능한 한 행을 반복하는 것을 피해야한다는 것을 알고 있습니다 ( FAQ 를 읽고 여기의 게시물을 따라).

그래서, data.table방법은 무엇입니까?


사용 .N...

DT[ , `:=`( COUNT = .N , IDX = 1:.N ) , by = VAL ]
#    VAL COUNT IDX
# 1:   1     3   1
# 2:   2     4   1
# 3:   2     4   2
# 4:   3     3   1
# 5:   1     3   2
# 6:   3     3   2
# 7:   3     3   3
# 8:   2     4   3
# 9:   2     4   4
#10:   1     3   3

.N에 의해 정의 된 그룹이있는 각 그룹의 레코드 수입니다 "VAL".

참조 URL : https://stackoverflow.com/questions/19869145/count-number-of-records-and-generate-row-number-within-each-group-in-a-data-tabl

반응형