将数据框中的一组因素与 dplyr 结合起来

combine sets of factors in a dataframe with dplyr

一个关于结合因素与dplry的问题。在下面的同一个 df 中,我想每年将因子 a 和 c 组合成一个新的因子 q,并将它们的值相加。我知道我可以 group_by(years),但我如何也 group_by q=a&c, l, b 和 y? (实际上,我想按年合并 12 个因素中的三个因素水平。)

year  factor    value   
1977     a      564907 
1977     c      349651
1977     l     2852949  
1978     a      504028  
1978     1      413120  
1978     y     2553088 
1979     a      497766 
1979     c      789007 
1979     b     1567934
1980     a      346892

我要:

year  factor    value   
1977     q      564907 + 349651
1977     l     2852949  
1978     q      504028  
1978     1      413120  
1978     y     2553088 
1979     q      497766 + 789007 
1979     b     1567934
1980     q      346892

提前致谢。

这是一个解决方案。不优雅,但我猜它很好用。

library(dplyr)

df %>% 
       mutate(index = ifelse(factor %in% c("a", "c"), "q", as.character(levels((factor))))) %>%
       group_by(year, index) %>%
       summarise(sum(value))

Source: local data frame [8 x 3]
Groups: year [?]

   year index sum(value)
  (int) (chr)      (int)
1  1977     b    2852949
2  1977     q     914558
3  1978     l     413120
4  1978     q     504028
5  1978     y    2553088
6  1979     b    1567934
7  1979     q    1286773
8  1980     q     346892

这可以通过 car 中的 recode 来完成。 group by操作可以用data.table来完成。我们将'data.frame'转换为'data.table'(setDT(df1)),recode将'factor'变量转换为levels'a'和'c' 到 'q',将其与 'year' 一起用作分组变量,并得到 'value'.

sum
library(car)
library(data.table)
setDT(df1)[, list(value=sum(value)) ,
         .(factor=recode(factor, "c('a', 'c')='q'"), year)]
#  factor year   value
#1:      q 1977  914558
#2:      l 1977 2852949
#3:      q 1978  504028
#4:      1 1978  413120
#5:      y 1978 2553088
#6:      q 1979 1286773
#7:      b 1979 1567934
#8:      q 1980  346892