以下是我数据框的前4行。我有美国各州的数据。因此,每个州有4条记录,即4年的年度排放量
states_fp year total_emissions
(chr) (int) (dbl)
2 01 1999 25226.298
3 01 2002 22883.223
4 01 2005 23855.563
5 01 2008 2803.835
我想添加一个包含delta的列。即与去年不同。
states_fp year total_emissions difference
(chr) (int) (dbl)
2 01 1999 25226.298 0
3 01 2002 22883.223 -2343.075
4 01 2005 23855.563 972.34
5 01 2008 2803.835 -21051.728
我会喜欢一个dplyr解决方案。
states_fp year total_emissions
(chr) (int) (dbl)
1 01 1999 25226.2980
2 01 2002 22883.2235
3 01 2005 23855.5635
4 01 2008 2803.8350
5 02 1999 1179.7820
6 02 2002 1256.3100
7 02 2005 871.3000
8 02 2008 200.1777
9 04 1999 6358.7810
10 04 2002 7020.6206
答案 0 :(得分:2)
为什么不直接添加这样的新列?
DF$difference <- append(diff(DF$total_emissions, lag = 1, differences = 1), 0, after = 0)
不需要dplyr
这是一个简短的变体:
DF$difference <- c(0, diff(DF$total_emissions))
在大多数情况下,最好让NA
代表第一个差异。这通常会阻止后来计算出奇怪的东西。如果您想要使用:c(NA, diff(...))
为每个州做这件事:
my.diff <- function(x) c(0, diff(x))
DF$difference <- ave(DF$total_emissions, DF$states_fp, FUN=my.diff)
(使用其他数据和新数据进行测试)