2017-10-31 10 views
0

나는이R 데이터 테이블에서 어떻게 하위 집합과 계산합니까?

a = data.table(
    ID = c(1, 1, 2, 2, 2, 3, 3), 
    TOUR = c("USA", "CHINA", "CHINA", "CHINA", "EUROPE", "CANADA", "USA") 
) 

와 유사한 데이터 세트를 가지고 있고이 생성하는 데이터를 집계하고 싶습니다 :

What I'm aiming for

데이터 테이블을 사용하여 ..... 수있는 사람 쇼 내 어떻게?

은, 필,

답변

3

우리는 첫 번째 행의 .N 즉, 수의 'ID'별로 그룹화 "NUMBER_OF_BOOKINGS"를 만들 수 있습니다 감사합니다, 다음 dcast 우리가 필요로하는 경우 length`

dcast(a[, NUMBER_OF_BOOKINGS := .N, ID], ID + NUMBER_OF_BOOKINGS ~ TOUR, length) 
# ID NUMBER_OF_BOOKINGS CANADA CHINA EUROPE USA 
#1: 1     2  0  1  0 1 
#2: 2     3  0  2  1 0 
#3: 3     2  1  0  0 1 

fun.aggregate as와 접두사 "TOUR"paste

dcast(a[, NUMBER_OF_BOOKINGS := .N, ID], ID + NUMBER_OF_BOOKINGS ~ 
        paste0("TOUR_", TOUR), length) 

,691,363 사용210

위 메서드는 원래 데이터 집합에 (:=)을 할당 할 때 열을 만듭니다. 이를 피하고자한다면 참여를 할 수 있습니다.

a[, .(NUMBER_OF_BOOKINGS = .N), ID][dcast(a, ID ~ paste0("TOUR_", TOUR), length), on = .(ID)] 
# ID NUMBER_OF_BOOKINGS TOUR_CANADA TOUR_CHINA TOUR_EUROPE TOUR_USA 
#1: 1     2   0   1   0  1 
#2: 2     3   0   2   1  0 
#3: 3     2   1   0   0  1 
+1

감사합니다. 필, – Philip