以下是我的数据框的前 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
我想添加一个包含增量的列。即与去年的差异。
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
最佳答案
为什么不像这样添加一个新列呢?
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)
(使用其他数据和您的新数据进行测试)
关于r - 计算由另一列分组的连续列值的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34104247/