아래 코드에서 plyr 또는 data.table을 사용하여 med.val2를 우아하게 계산하는 방법에 대한 통찰력이 있는지 궁금합니다.그룹 별 중형자 R
library(plyr)
설치 예 데이터
루프에 의해data <- data.frame(id1 = 1:20, id2 = rep(letters[1:4], 5), vals=rnorm(20))
먼저 계산 그룹 중앙값
data$med.val <- rep(0, 20)
for (ind in 1:20) data$med.val[ind] <- median(data$vals[data$id2==data$id2[ind]])
지금 plyr
를 사용data <- ddply(data, .(id2), mutate, med.val.plyr=median(vals))
는 같아야
R에서 초점 행# Median of values corresponding to
# data$id1!=data$id1[ind] & data$id2==data$id2[ind]
data$med.val2 <- rep(0, 20)
for (ind in 1:20) data$med.val2[ind] <- median(data$vals[data$id1!=data$id1[ind] & data$id2==data$id2[ind]])
제외한 동일한 ID2와 행
all.equal(data$med.val, data$med.val.plyr)
메디안은, I는 전형적으로 효율적기로 값을 계산하거나 plyr data.table를 사용한다. 내 실제 데이터와 함수는 더 복잡하지만 구조가 동일합니다. 초점 행을 제외하고 공통 식별자가있는 행의 데이터를 사용하여 함수를 계산해야합니다. 그리고 나는 그것을 효율적이고 우아하게하는 방법을 이해할 수 없습니다.