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

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

我有以下问题: 我有一个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
我用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