【问题标题】:Add row value to previous row value in R将行值添加到 R 中的前一行值
【发布时间】:2015-10-09 12:24:50
【问题描述】:

我有一个非常基本的问题,因为我对 R 比较陌生。我想知道如何将列中的值添加到前一个值中,然后在包含 1000 个值的列中重复?请注意,我不想要累积和,因此 cumsum 函数没有用。假设我的列称为 WD,我想将 WD1 添加到 WD2、WD2 到 WD3、WD3 到 WD4 等,然后将这些总和作为新列输出。有没有简单的方法?非常感谢。

一个可重现的例子:

set.seed(111)
df1 <- data.frame(WD=sample(10))

#result
df1
   WD new
1   6   6
2   7  13
3   3  10
4   4   7
5   8  12
6  10  18
7   1  11
8   2   3
9   9  11
10  5  14

【问题讨论】:

    标签: r


    【解决方案1】:

    我们将当前行 (WD[-nrow(df1)]) 与下一行 (WD[-1L]) 添加并与第一个元素连接以创建列。

    df1$newColumn <- with(df1, c(WD[1],WD[-1]+WD[-nrow(df1)]))
    

    【讨论】:

    • 非常感谢 akrun - 一个非常简单且完美运行的解决方案。非常感谢您的帮助!
    • @DJ-AFC 没问题。很高兴知道它对您有所帮助。
    【解决方案2】:

    另一个选项,使用来自dplyrlag()

    library(dplyr)
    mutate(df1, new = WD + lag(WD, default = 0))
    

    或者使用来自data.tableshift()

    library(data.table)
    setDT(df1)[, new := WD + shift(WD, fill = 0)]
    

    注意shift() 的默认类型是“滞后”。另一个可能的值是“lead”。

    这给出了:

    #   WD new
    #1   6   6
    #2   7  13
    #3   3  10
    #4   4   7
    #5   8  12
    #6  10  18
    #7   1  11
    #8   2   3
    #9   9  11
    #10  5  14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 2021-05-26
      • 1970-01-01
      • 2022-12-18
      • 2016-09-26
      • 1970-01-01
      • 2016-09-20
      • 2014-12-13
      相关资源
      最近更新 更多