假设我有一个包含三列的数据框:
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
Run Code Online (Sandbox Code Playgroud)
如何减去AnnualSpending 的先前值并将结果添加到新列,以便与每个ID 对应的第一行始终为0?
changeFromPrevious
0
-6.87
-42.68
0
-21.15
-18.58
100.14
0
-150.87
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |