计算连续列值组与另一列的差异

时间:2015-12-05 11:19:54

标签: r dplyr

以下是我数据框的前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

1 个答案:

答案 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)

(使用其他数据和新数据进行测试)