1
행의 하위 집합에 대한 집계 함수를 기반으로 각 하위 집합 내의 R로 데이터 테이블을 하위 집합화하려고합니다. 예를 들어, 각 키에 대해 하위 집합의 행에 대해서만 계산 된 필드의 평균보다 큰 모든 값을 반환합니다. 예 :키가있는 행의 집합을 기반으로 행의 하위 집합을 반환하십시오.
library(data.table)
t=data.table(Group=rep(c(1:5),each=5),Detail=c(1:25))
setkey(t,'Group')
library(foreach)
library(dplyr)
ret=foreach(grp=t[,unique(Group)],.combine=bind_rows,.multicombine=T) %do%
t[Group==grp&Detail>t[Group==grp,mean(Detail)],]
# Group Detail
# 1: 1 4
# 2: 1 5
# 3: 2 9
# 4: 2 10
# 5: 3 14
# 6: 3 15
# 7: 4 19
# 8: 4 20
# 9: 5 24
#10: 5 25
문제는, 그것은 간결 data.table 기능을 사용하여 마지막 두 줄을 코딩 할 수 있습니까? 죄송합니다 이것이 반복 있다면, 나는 또한 정확한 목표를 설명하는 데 어려움을 겪고 있습니다. google/stackoverflow 찾을 수 있습니다.
'의 DT [.SD [상세보기> 평균 (세부 사항)] = 그룹에 의해]'어쩌면 ? ('t'는'R'에있는 함수이기 때문에't''를'dt'로 이름을 바꾸 었습니다. 'indx <- dt [, .I [Detail> mean (Detail)], by = Group] $ V1; 일부 성능을 얻으려면 dt [indx]를 사용하십시오. –
감사합니다. David, 예, 코드를 실제로 실행하지 않았으며 예제로 썼습니다 (조바꿈). 나는 너의 대답을 확인했다. –
'data.table' v> = 1.9.7을 사용하면'res <- dt [, mean (Detail), by = Group]과 같은 비등가 조인을 할 수도 있습니다; dt [res,. (Group, x.Detail), on =. (Group, Detail> V1)]' –