r - 为对应于 R 中某个 ID 的数据框的每个部分减去上一行中的值

标签 r dataframe

假设我有一个包含三列的数据框:

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/

相关文章:

r - 将计算列添加到数据框 R

r - voronoi 镶嵌中的层次结构

r - 查找接近 r 中某个值的倍数

Python 转换一个数组

r - 通过在 R 中添加零来塑造数据框

python - 在 R 中创建我的数据框列的所有可能组合

html - Shiny 的 HTML UI :

r - 在r中提取两个彼此相邻的主题标签

json - 我如何在 spark(scala 或 java)中将平面数据帧转换为嵌套的 json

python - 将数据框写入带有标题的 excel