r - 按组获取同比百分比变化

标签 r dataframe time-series transform

我正在处理与提取对应的数据集:

set.seed(1)
df <- data.frame(indicator=runif(n = 100),cohort=letters[1:4],
                 year=rep(1976:2000, each=4))
我想为数据集中表示的每个 cohort 生成一个百分比同比变化的变量。我尝试使用下面的代码( from this discussion ):
df$ind_per_chng <- transform(new.col=c(NA,indicator[-1]/indicator[-nrow(df)]-1))
但我有兴趣让它在每个子组中工作,并只生成一个带有百分比变化的额外列,而不是当前创建的一组列:
> head(df)
  indicator cohort year ind_per_chng.indicator ind_per_chng.cohort ind_per_chng.year
1 0.2655087      a 1976              0.2655087                   a              1976
2 0.3721239      b 1976              0.3721239                   b              1976
3 0.5728534      c 1976              0.5728534                   c              1976
4 0.9082078      d 1976              0.9082078                   d              1976
5 0.2016819      a 1977              0.2016819                   a              1977
6 0.8983897      b 1977              0.8983897                   b              1977
  ind_per_chng.new.col
1                   NA
2            0.4015509
3            0.5394157
4            0.5854106
5           -0.7779342
6            3.4544877

编辑
要回答有用的评论,输出的格式应对应于下表:
desired format
原始 data.frame 没有其他更改,除了提供跨年份每个队列的所选变量的百分比变化值的列。

最佳答案

我不确定我是否正确理解您希望输出的样子,但这就是您所追求的吗?

library(dplyr)
df2 <- df%>%
    group_by(cohort) %>%
    arrange(year) %>%
    mutate(pct.chg = (indicator - lag(indicator))/lag(indicator))

如果您希望百分比为 0-100 而不是 0-1,请将 100 * () 添加到最后一行,即 mutate(pct.chg = 100 * ((indicator - lag(indicator))/lag(indicator))) 。结果如下所示:
  indicator cohort year    pct.chg
1 0.2655087      a 1976         NA
2 0.2016819      a 1977 -24.039416
3 0.6291140      a 1978 211.933767
4 0.6870228      a 1979   9.204818
5 0.7176185      a 1980   4.453369
6 0.9347052      a 1981  30.250993

关于r - 按组获取同比百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812864/

相关文章:

r - 替换、评估、bquote、do.call ... 替换表达式的一些指导

python - 尝试基于三个条件创建新的 id 列时出现问题?

python - 如何将 pandas DataFrame 中的 2 行与连续时间戳合并?

python - 如何为具有清晰时间戳的时间序列数据构建数据框?

xml - R xml树到数据框

r - 直方图中条形图一角的数字,如何让它们在条形图下方居中?

regex - Python 3 Pandas 使用 Startswith + 或选择 Dataframe

python read_csv问题

r - 使用 Sweave 和 LaTeX 生成批量自定义报告

python - 将函数应用于多个数据框列