我一次又一次地遇到问题,我需要拆分data.frame
,其中一列是(可能是无序的)序列。拆分应在这些行中进行,其中在序列中满足某个标准。
所以假设这个data.frame是一个简单的例子:
dt <- data.frame( A = sort(sample( 1:300, 100 )) , B = rnorm(100) )
我希望在dt
中分割A
时出现大4的差距,并计算B
中的均值。我所做的是通过
F
dt[ , "F" ] <- c( 0, cumsum( diff( dt[, "A"] ) > 4) )
head(dt)
A B F
1 2 -0.8019945 0
2 6 -0.1948101 0
3 7 0.1961203 0
4 12 -0.2478185 1
5 13 1.2571841 1
6 14 2.1354909 1
然后
library(plyr)
ddply( dt, .(F), summarise,
A.range = paste( range(A), collapse = "-" ),
B.mean = mean( B )
)
F A.range B.mean
1 0 2-7 -0.26689475
2 1 12-17 0.57051336
3 2 25-25 0.29054572
我的问题是:base
或其他软件包(plyr
,data.table
,zoo
,...)中是否没有此类函数替换{{1诀窍并给我更灵活的分裂标准?
答案 0 :(得分:1)
我认为你是以正确的方式做到的。为了使其更有效(从编程角度来看),您可以直接在ddply()
调用
ddply( dt, .(F=c( 0, cumsum( diff( dt[, "A"] ) > 4) )), summarise,
A.range = paste( range(A), collapse = "-" ),
B.mean = mean( B )
)