反转累计总和以确定R中的实际值
我有一个df,其中每一行都是上面一行的累积和。有没有办法从该df导出原始值反转累计总和以确定R中的实际值,r,cumsum,R,Cumsum,我有一个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 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
使用
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
df %>%
mutate_at(vars(X1:X2), ~ .-c(0,lag(.)[-1]))
或者如评论中提到的@BrennanBeal,在最近版本的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
df %>%
mutate_at(vars(X1:X2), ~ .-c(0,lag(.)[-1]))
或从dplyr
1.0.0
df %>%
mutate(across(X1:X2, ~ .-c(0,lag(.)[-1])))
最近发现了这个(并且使用了一个修改过的版本),所以谢谢你的发帖!很晚才来到这里,mutate_每个都不推荐使用,代码现在需要:
df%>%mutate_at(vars(X1:X2)、funs(.-c(0,lag(.)[-1]))
,希望这对将来的人有所帮助,谢谢你的帖子。@Brennabeal谢谢你。我在帖子中添加了你的评论。希望你不介意。谢谢