【问题标题】:Operate on multiple rows of dataframe simultaneously in R在R中同时操作多行数据帧
【发布时间】:2020-02-10 08:03:48
【问题描述】:

我确定以前有人问过这个(非常基本的)问题,但我一定是在寻找错误的东西,因为我找不到答案:

我经常需要执行涉及组合来自同一数据帧的多行数据的操作。我知道如何使用循环结构来做到这一点,例如

for (i in 2:nrow(df)) { df$result[i] <- df$data[i] - df$data[i-1] }
for (i in 12:nrow(df)) { j <- i - 11; df$result[i] <- prod(df$data[j:i]) }

对于这类不涉及循环的操作,是否有通用解决方案?还是在 R 中循环实际上是最好的方法?

【问题讨论】:

  • 谢谢!这两种解决方案都让我遇到了第一种情况,我需要处理“这一行”和“前一行”。第二种情况是否有类似的解决方案,我需要处理“这一行”和“前十一行”?

标签: r loops dataframe rows


【解决方案1】:

您可以尝试对数据框进行子集化,例如这个:

for (i in 2:nrow[df]) { df$result[i] <- df$data[i] - df$data[i-1] }

变成:

df$result[2:nrow(df)] <- df$data[2:nrow(df)] - df$data[1:nrow(df)-1]

注意:nrow() 是一个 AFAIK 函数,因此您应该使用括号而不是方括号来调用它。

【讨论】:

    【解决方案2】:

    在基础 R 中:

    df$result[2:nrow(df)] = diff(df$data)
    df$result2[13:nrow(df)] = diff(df$data,12)
    

    或dplyr:

    df$result = dplyr::lag(df$data)
    df$result2 = dplyr::lag(df$data, 12)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2018-11-24
      • 2017-06-29
      • 2021-08-01
      相关资源
      最近更新 更多