【问题标题】:How to add to a new dataframe the preceding rows! R如何将前面的行添加到新数据框中! R
【发布时间】:2014-02-12 15:03:08
【问题描述】:

我有一个大致如下所示的日期框架:

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 行添加到新数据框中。

【问题讨论】:

  • which(z$x==1) 为您提供 x 为 1 的索引。您想要所有这些索引的前四行吗?
  • 感谢您的评论。是的,完全适合他们每个人
  • 然后你想要四个数据帧(z 的第 6、7、8、10 行)?然后你可以这样做:lapply(which(z$x==1), function(x)z[(x-4):x,])。还是您希望最后只有一个数据框?
  • 你做什么例如在第 10 行:再次包括这一行和前面的四行?这有点像@user1981275 的评论
  • 非常感谢,我可以添加 rbind.fill(来自 plyr 包)来创建一个数据框。完美运行。

标签: r loops dataframe rows


【解决方案1】:

@user1981275 解决方案的一个小重复,如果没有前面的行以避免负索引,则有一个小修复

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

【讨论】:

  • 对不起,我不明白你的评论。
【解决方案2】:

你可以创建一个索引:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多