ddpy()
아주 잘이 크기 (10^2)의 데이터 세트를 처리합니다. 그러나, 더 큰 데이터 세트에 대한 당신은 반드시 전체 dataframe을 돌려 줄 필요가없는 상황에서, 나는 다음과 같은 do.call
+ lapply
해결책이라고 생각 :
my.fun <- function(cur.tic){
as.numeric(diff(temp$dcvt[temp$tic == cur.tic]) > 0)
}
do.call("c", lapply(unique(temp$tic), my.fun))
는 성능 보수를 설명하기를 (부당 벡터 대 주어 데이터 프레임 문제), OP의 샘플 데이터를 가져 와서 10^4, 10^5 및 10^6 크기의 새 데이터 프레임을 만든 다음 system.time()
을 @ kohske의 ddply
솔루션과 위의 솔루션에서 실행했습니다.
원본 데이터 (10^2) :
> system.time(do.call("c", lapply(unique(temp$tic), my.fun)))
user system elapsed
0.000 0.000 0.003
> system.time(ddply(temp, .(tic), transform, dcvt=c(0, diff(dcvt)>0)))
user system elapsed
0.020 0.000 0.013
,451,515,
10^4 샘플 데이터
> system.time(do.call("c", lapply(unique(temp.2$tic), my.fun)))
user system elapsed
0.000 0.000 0.002
> system.time(ddply(temp.2, .(tic), transform, dcvt=c(0, diff(dcvt)>0)))
user system elapsed
0.040 0.000 0.036
10^5 개 샘플 데이터
> system.time(do.call("c", lapply(unique(temp.3$tic), my.fun)))
user system elapsed
0.000 0.000 0.004
> system.time(ddply(temp.3, .(tic), transform, dcvt=c(0, diff(dcvt)>0)))
user system elapsed
0.270 0.000 0.279
10^6 샘플 데이터
> system.time(do.call("c", lapply(unique(temp.4$tic), my.fun)))
user system elapsed
0.010 0.000 0.018
> system.time(ddply(temp.4, .(tic), transform, dcvt=c(0, diff(dcvt)>0)))
user system elapsed
6.110 0.070 6.186
아니 불만 ddply()
에 대한 -이 아니라, 단지 노력 최근에 많은 대상 데이터 세트를 사용하여 매우 비슷한 문제를 해결하면서 유용한 코드를 공유했습니다.
감사합니다. 신기한 실수; 나는 심지어 몇 달 전 여기서 'ddply'트릭을 '변형'시키는 것을 보았습니다! –