我有一个日期框架,看起来大致是下一个方式:
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行添加到新的数据框中。
答案 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)