如何将前面的行添加到新数据框中! [R

时间:2014-01-22 13:56:08

标签: r loops dataframe rows

我有一个日期框架,看起来大致是下一个方式:

x<-c(0,0,0,0,0,1,1,1,0,1,0)
y<-c(12,12,3,45,6,5,63,2,3,4,5)
z<-data.frame(x,y)
z
#   x  y
#1  0 12
#2  0 12
#3  0  3
#4  0 45
#5  0  6
#6  1  5
#7  1 63
#8  1  2
#9  0  3
#10 1  4
#11 0  5

我想运行一个函数或循环来查找x中等于1的行,并将此行和前面的4行添加到新的数据框中。

2 个答案:

答案 0 :(得分:1)

您可以创建索引:

z[sapply(which(as.logical(z$x)), function(x) seq(x - 4, x)), ]

答案 1 :(得分:0)

对@ user1981275解决方案的一个小小的试验,如果没有前面的行,可以使用小修复来避免负索引

l <- lapply(which(z$x==1), function(x) {
  z[(ifelse(x-4 < 1, 1, x-4)):x,]
})
do.call(rbind, l)