많은 열이있는 매우 큰 데이터 집합이 있습니다. 이 데이터를 집계하고 각 열 집합에 다른 기능을 수행해야합니다. 필자는 많은 열을 가지고 있으므로 집계의 각 열과 함께 사용할 각 함수를 수동으로 지정하는 것이 번거로울 수 있습니다. data.table
으로 집계하는 방법에 대한 많은 게시물을 읽었지만 아무도이 상황을 처리하지 못하는 것 같습니다.Data.table을 사용하여 큰 데이터 테이블에서 다른 수식의 여러 열 집계 r
예
는 mpg
데이터 세트로 작업을 할 수 있습니다. cyl
과 trans
으로 집계하고 싶습니다. cty
및 hwy
열의 평균을 반환하고 싶지만 첫 번째 값은 manufacturer
및 model
에서 반환하고 싶습니다. 실제로 나는 cols<-names(data)[10:50]
및 .SDcols=cols
을 지정하여 더 많은 열에 적용 할 것입니다. 개별적으로 각 열 집합을 처리하고 나중에 데이터를 병합 할 수 있지만 수십 개의 서로 다른 열 그룹이있을 때도 혼란스러워집니다. data.table
으로 더 좋은 방법이 있어야한다고 생각합니다.
require("data.table")
require("ggplot2") #for the mpg dataset
dat1<-data.table(mpg)
perf<-dat1[, lapply(.SD, ave), .SDcols=c("cty","hwy"), by=list(cyl,trans)] #Aggregate performance data.
info<-dat1[, lapply(.SD, first), .SDcols=c("manufacturer","model"), by=list(cyl,trans)] #Aggregate model data.
perf[info, on=list(cyl,trans)] #Merge data
> head(perf[info, on=list(cyl,trans)])
cyl trans cty hwy manufacturer model
1: 4 auto(l5) 6 6 audi a4
2: 4 manual(m5) 33 33 audi a4
3: 4 manual(m6) 7 7 audi a4
4: 4 auto(av) 2 2 audi a4
5: 6 auto(l5) 16 16 audi a4
6: 6 manual(m5) 18 18 audi a4
질문
어떻게 1 개 동작 위를 수행 할 수 있습니다? 내가 생각하는 것은 각 그룹을 부분 집합하고 다음과 같은 일을하는 것이다. 어쩌면 조금 과장 할 지 모르겠지만, 나는 추측할만한 별을 쏘고있다.
dat1[, .(names(group1)=lapply(group1, ave),names(group2)=lapply(group2, first)), by=list(cyl,trans)]
내가 연구에서 평균을내어 기능 때문에 OP는 다른 결과를 제공합니다. – Frank
환상적인 답변입니다. 'ave'에 대한 정정을 보내 주셔서 감사 드리며, 그것이 바로 워크 플로우를 엑셀과 믹싱하는 것입니다. – CCurtis