根据年份和类别计算百分比差异

时间:2015-12-23 12:00:55

标签: r

我有以下问题: 我有一个data.frame有两个因子变量和一个数字变量。一个因子变量是年,另一个因子变量是一个类别。变量年份对于两个类别中的每一个都有相同的三年。

set.seed(100)    
df <- data.frame(year=c(2000, 2002, 2004),cat=rep(1:2,3), val=round(rnorm(6,5,3)*100,2))

  year cat    val
1 2000   1 349.34
2 2002   2 539.46
3 2004   1 476.32
4 2000   2 766.04
5 2002   1 535.09
6 2004   2 595.59

我想计算每个类别基于2000年的年份之间的百分比差异。 应使用以下值添加两个新变量(基于此示例):

pd         diff
100        0
70,43      -29,57
136,35     +36,35
100        0
153,17     +53,17
77,75      -22,25

我尝试使用diff()函数的aggregate()函数,但没有得到任何结果。 我真的很感激你的帮助。 谢谢你,祝圣诞快乐!

1 个答案:

答案 0 :(得分:3)

这是一个dplyr解决方案。您需要按类别和年份对data.frame进行排序才能使用dplyr::first(),因此我的输出与您的输出略有不同。

set.seed(100)    
df <- data.frame(year=c(2000, 2002, 2004),cat=rep(1:2,3), val=round(rnorm(6,5,3)*100,2))

library(dplyr)
arrange(df,cat,year) %>% 
  group_by(cat) %>% 
  mutate(pd=val/first(val)*100,
         diff=pd - first(pd))

Source: local data frame [6 x 5]
Groups: cat [2]

   year   cat    val        pd      diff
  (dbl) (int)  (dbl)     (dbl)     (dbl)
1  2000     1 349.34 100.00000   0.00000
2  2002     1 535.09 153.17170  53.17170
3  2004     1 476.32 136.34854  36.34854
4  2000     2 766.04 100.00000   0.00000
5  2002     2 539.46  70.42191 -29.57809
6  2004     2 595.59  77.74920 -22.25080