我有一个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
由于
答案 0 :(得分:4)
只需使用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
返回的lenght
向量比输入少一个,因此您需要使用0
填充输入(因此也会保留该列中的原始值)。< / p>
正如@DavidArenburg所提到的,你也可以轻松地将其改编为&#34; data.table&#34;代码也是这样的:
library(data.table)
as.data.table(mydf)[, lapply(.SD, function(x) diff(c(0, x)))]
答案 1 :(得分:0)
使用dplyr
library(dplyr)
df %>%
mutate_each(funs(.-c(0,lag(.)[-1])))
# X1 X2
#1 1 5
#2 2 4
#3 3 3
#4 4 2
#5 5 1