【问题标题】:how to select previous rows in data frame?如何选择数据框中的前几行?
【发布时间】:2015-06-19 02:01:39
【问题描述】:

假设我们有一个数据框:

df <- data.frame(a=1:5, b=4:8)

如何根据前几行进行子集化?例如,如果我在第 3 行,我想获得第 1 行和第 2 行的值,如果我在第 4 行,我想获得第 2 行和第 3 行的值。如何在 R 中做到这一点?

【问题讨论】:

  • 前几行?从您的帖子来看,似乎是两个。
  • 不清楚但可以看headlagshift
  • @Pascal 是的,假设这个例子有 2 行。我希望为这样的事情找到一个通用的解决方案
  • 这对我来说毫无意义。短语“前一行的子集”在操作上没有定义。如果问题是如何在 for 循环中从当前索引中减去 1 或 2,那么它看起来微不足道。
  • 使用 for 循环很简单,但速度很慢。使用 zoo 中的 lag 可以实现矢量化。

标签: r dataframe subset


【解决方案1】:

使用zoo 库(小心,因为基本滞后的工作方式不同):

library(zoo)
df <- zoo(df)
df[lag(df$b, -1) == 4, ]

  a b
2 2 5

df[lag(df$b, -2) == 4, ]

  a b
3 3 6

【讨论】:

    【解决方案2】:

    这可能太简单了,但如果你想要一个通用的答案,这可能是正确的:

    # create your data.frame, not using 'df' as it is an R function name
    myDF <- data.frame(a=1:5, b=4:8)
    
    # you know you "are at row 4"
    i <- 4
    
    # so you can get the previous two rows simply with
    myDF[ ( i - 2:1 ), ]
      a b
    2 2 5
    3 3 6
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2019-10-14
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多