提取rollapply计算为TRUE的行集?

时间:2013-07-31 01:50:55

标签: r zoo

说我有一个数据框

df <- data.frame(A=c(1,3,1,4,2,2,5,3,1,7,8),b=c(10:20),c=c(20:30))

我希望提取A列中总和为4的所有连续行。

我可以使用rollapply包中的zoo进行操作,并轻松找出是否有任何此类行

rollapply(df$A,2,function(x)(ifelse(sum(x)==4,print("YES"),print("NO"))))

但我希望能够取出这个条件为真的行,并将它们放在另一个数据框中

sum4 <- data.frame(A=c(1,3,1,2,2,3,1),B=c(10,11,12,14,15,17,18),C=c(20,21,22,24,25,27,28))

这是可能的,如果是的话,怎么样?

1 个答案:

答案 0 :(得分:3)

将滚动总和的结果保存为某个东西,然后构造一个包含这些总和== 4所基于的行的向量(row, row+1)

rs2 <- with(df,rollapply(A, 2, sum, fill = NA))
s4 <- sort(unique(c(s4 <- which(rs2==4),s4+1)))
subset the appropriate rows
df[s4,]
#   A  b  c
# 1 1 10 20
# 2 3 11 21
# 3 1 12 22
# 5 2 14 24
# 6 2 15 25
# 8 3 17 27
# 9 1 18 28