我有一个 df ,其中每一行都是它上面行的累积总和。有没有办法从这个 df 导出原始值?

   X1 X2
1  1  5
2  3  9
3  6 12
4 10 14
5 15 15

期望的输出:
   X1 X2
1  1  5
2  2  4
3  3  3
4  4  2
5  5  1

谢谢

最佳答案

只需使用 diff 。假设您的数据集名为“mydf”并且您想对所有列执行此操作,请尝试:

mydf[] <- lapply(mydf, function(x) diff(c(0, x)))
mydf
#   X1 X2
# 1  1  5
# 2  2  4
# 3  3  3
# 4  4  2
# 5  5  1

由于 diff 返回的 length 向量比输入小 1,因此您需要用 0 填充输入(因此也保留该列中的原始值)。

正如@DavidArenburg 所提到的,您也可以轻松地将其调整为“data.table”代码,如下所示:
library(data.table)
as.data.table(mydf)[, lapply(.SD, function(x) diff(c(0, x)))]

关于反转累积总和以确定 R 中的实际值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27123763/

10-12 18:47