反转累计总和以确定R中的实际值

反转累计总和以确定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 #

我有一个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

使用
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谢谢你。我在帖子中添加了你的评论。希望你不介意。谢谢