R 根据年份和类别计算百分比差异
我有以下问题: 我有一个data.frame,包含两个因子变量和一个数值变量。一个因素变量是年份,另一个因素变量是类别。两个类别的可变年份均为相同的三年R 根据年份和类别计算百分比差异,r,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
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
我用diff()函数尝试了aggregate()函数,但没有得到结果。
我真的很感激你的帮助。
提前谢谢,圣诞快乐 这是一个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
set.seed(100)
df%
分组依据(类别)%>%
突变(pd=val/第一(val)*100,
差异=局部放电-第一(局部放电))
来源:本地数据帧[6 x 5]
分组:cat[2]
年份cat val pd diff
(dbl)(int)(dbl)(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
您可以使用软件包吗?如果是这样的话,dplyr
将是一个很好的选项,它的groupby
功能
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