데이터 집합의 다양한 하위 집합을 결합하는 여러 변수를 만들고 싶습니다. 내가 변수 Var1
여러 평균을 찾으려면다른 하위 집합에 대해 data.table의 j로 여러 개의 새로운 열을 만드는 방법
DT = data.table(Group1 = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4),
Group2 = c(1,1,1,2,2,1,1,2,2,2,1,1,1,1,2,1,1,2,2,2),
Var1 = c(1,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0))
: 설명 예를 들어, 다음과 같은 데이터를 말한다. 내가 알고 싶은 :
mean(Var1)
이Group1
또는에서별로 그룹화, Group2 == 2
있는 사람에 대해서만 Group1
mean(Var1)
별로 그룹화, Group2 == 1
있는 사람에 대해서만 Group1
mean(Var1)
별로 그룹화 data.table 용어, DT[, mean(Var1), by=Group1]
DT[Group2==1, mean(Var1), by=Group1]
DT[Group2==2, mean(Var1), by=Group1]
분명히 이들 중 하나를 계산하는 것은 매우 간단합니다. 그러나 나는 그들 모두가 i
에서 다른 부분 집합을 사용하기 때문에 3 가지를 모두 계산할 좋은 방법을 찾을 수 없습니다. 지금까지 사용해온 솔루션은 개별적으로 생성 한 다음이를 통합 테이블에 병합합니다.
DT_all <- DT[, .(avgVar1_all = mean(Var1)), by = Group1]
DT_1 <- DT[Group2 == 1, .(avgVar1_1 = mean(Var1)), by = Group1]
DT_2 <- DT[Group2 == 2, .(avgVar1_2 = mean(Var1)), by = Group1]
group_info <- merge(DT_all, DT_1, by = "Group1")
group_info <- merge(group_info, DT_2, by = "Group1")
group_info
# Group1 avgVar1_all avgVar1_1 avgVar1_2
# 1: 1 0.4 0.6666667 0.0000000
# 2: 2 0.6 1.0000000 0.3333333
# 3: 3 0.2 0.2500000 0.0000000
# 4: 4 0.0 0.0000000 0.0000000
내가 사용할 수있는보다 우아한 방법이 있습니까?
성능을 위해, 일반적으로 눈살을 찌푸리게 .SD을 부분 집합은 아니지만이, 트릭을합니까? 또는 .SD에서 열의 하위 집합을 가져 오는 것입니까? –
@ConnorJ - 나는 주제에 대한 권위자는 아니지만'.SD' 하위 집합은 많은 문제에있어 최적화 된 것으로 생각됩니다. 내가 틀렸다면 Arun이나 Matt이 머리를 맞아서 기쁘게 생각합니다. – thelatemail
@ConnorJ - 이제 세부 정보를 살펴 보았으니 어쩌면 네 말이 맞고 이상하지도 않을거야 - https://github.com/Rdatatable/data.table/issues/735 – thelatemail