我有以下问题: 我有一个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()函数,但没有得到任何结果。 我真的很感激你的帮助。 谢谢你,祝圣诞快乐!
答案 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