r - 计算由另一列分组的连续列值的差异

标签 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

我想添加一个包含增量的列。即与去年的差异。

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/

相关文章:

R 按索引(日期)对多个数据帧的列表求和

python - 在 Python Pandas 中,如何像 R dplyr mutate_each 一样使用

r - 在R中将字符列转换为具有混合数字和日期的日期

R:facet_wrap 无法在 Shiny 应用程序中使用 ggplotly 正确呈现

r - 如何在 dplyr 中改变 for 循环

r - 如何按组运行返回向量而不是单个值的函数?

r - 生成两个有条件的系列随机数

r - R中所有数字的中位数和所有字符的模式

r - 在 dplyr 包中使用 summarise 和 across ,同时区分数字列和非数字列

r - 在 R 中将多列转换为行