我有一個df,其中每行是其上面一行的累計總和。有沒有辦法從這個df派生出原始值?扭轉累計總和以確定R中的實際值
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
感謝
我有一個df,其中每行是其上面一行的累計總和。有沒有辦法從這個df派生出原始值?扭轉累計總和以確定R中的實際值
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
收益比輸入lenght
一個少一個向量,就需要墊一個0
輸入(因此也保留了該欄中的原始值)。
由於@DavidArenburg提到,你也可以很容易地適應這個以 「data.table」 代碼太,像這樣:
library(data.table)
as.data.table(mydf)[, lapply(.SD, function(x) diff(c(0, x)))]
使用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