r - 在序列上,拆分应用

  显示原文与译文双语对照的内容

每一次,我都有一个问题,我需要拆分一个 data.frame,它的中一列是( 可能无序) 序列。 拆分应在这些行中完成,在这些行中满足一定的条件。

假设这个 data.frame 是一个简单的例子:


dt <- data.frame( A = sort(sample( 1:300, 100 )), B = rnorm(100) )

我想在 A 中分割 dt 时,会发生一个更大的4,并计算 B 中的平均值。 我所做的是引入一个id变量 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 或者它的他软件包( plyrdata.tablezoo,。) 中没有这样的功能,并给我更多的灵活性。

时间: 作者:

我想你是用正确的方法。 为了使( 从编程的角度来看) 更加高效,你可以直接在 ddply() 调用中调用 cumsum/diff [or other function]


ddply( dt,. (F=c( 0, cumsum( diff( dt[,"A"] )> 4) )), summarise,
 A.range = paste( range(A), collapse ="-" ),
 B.mean = mean( B )
)

作者:
...