按组获取同比百分比变化
Obtaining year-on-year percentage change by group
我正在处理与摘录相对应的数据集:
set.seed(1)
df <- data.frame(indicator=runif(n = 100),cohort=letters[1:4],
year=rep(1976:2000, each=4))
我想为数据集中表示的每个 cohort
生成一个具有 同比 百分比变化的变量。我尝试使用下面的代码 ():
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
编辑
为了回答有用的评论,输出的格式应该对应于下面的table:
除提供跨年每个同类群组所选变量百分比变化值的列外,原始 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
我正在处理与摘录相对应的数据集:
set.seed(1)
df <- data.frame(indicator=runif(n = 100),cohort=letters[1:4],
year=rep(1976:2000, each=4))
我想为数据集中表示的每个 cohort
生成一个具有 同比 百分比变化的变量。我尝试使用下面的代码 (
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
编辑
为了回答有用的评论,输出的格式应该对应于下面的table:
除提供跨年每个同类群组所选变量百分比变化值的列外,原始 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