假设我有一个包含三列的数据框:
df<-data.frame(ID=c(101,101,101,102,102,102,102,104,104),
Year=c(2005,2006,2007,1998,1999,2000,2001,2012,2013),
AnnualSpending=c(94.50,87.63,44.95,65.37,44.22,25.64,125.78,250.87,100))
ID Year AnnualSpending
1 101 2005 94.50
2 101 2006 87.63
3 101 2007 44.95
4 102 1998 65.37
5 102 1999 44.22
6 102 2000 25.64
7 102 2001 125.78
8 104 2012 250.87
9 104 2013 100.00
如何减去 AnnualSpending 的先前值并将结果添加到新列中,以便每个 ID 对应的第一行始终为 0?
changeFromPrevious
0
-6.87
-42.68
0
-21.15
-18.58
100.14
0
-150.87
最佳答案
使用dplyr
library(dplyr)
df %>%
group_by(ID) %>%
mutate(changeFromPrevious = AnnualSpending - lag(AnnualSpending,
default = AnnualSpending[1]))
# A tibble: 9 × 4
ID Year AnnualSpending changeFromPrevious
<dbl> <dbl> <dbl> <dbl>
1 101 2005 94.50 0.00
2 101 2006 87.63 -6.87
3 101 2007 44.95 -42.68
4 102 1998 65.37 0.00
5 102 1999 44.22 -21.15
6 102 2000 25.64 -18.58
7 102 2001 125.78 100.14
8 104 2012 250.87 0.00
9 104 2013 100.00 -150.87
关于r - 为对应于 R 中某个 ID 的数据框的每个部分减去上一行中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237345/