总和对R中的因子没有意义

时间:2019-04-04 07:21:15

标签: r

我需要在col2和col3中汇总相同的值,因此我希望在col4和col5中接收到SUM:

df <- data.frame("col1"="a", "col2"=c("mi", "se", "mi", "se", "ty"), 
                 "col3"=c("re", "my", "re", "my", "my"), "col4"=c(1, 2, 3, 4, 5), 
                 "col5"=c(1, 2, 3, 4, 5))
agg <- aggregate(df, by=list(df$col1, df$col2), FUN=sum)

结果是错误的,但是:

Error in Summary.factor(c(1L, 1L), na.rm = FALSE) : ‘sum’ not meaningful for factors

我的预期输出是

  col1 col2 col3 col4 col5
1    a   mi   re    4    4
2    a   se   my    6    6
3    a   ty   my    5    5

2 个答案:

答案 0 :(得分:0)

通过在list(col4, col5)上进行汇总来排除因子列。

with(df, aggregate(list(col4, col5), by=list(col1, col2, col3), sum))
#   Group.1 Group.2 Group.3 c.1..2..3..4..5. c.1..2..3..4..5..1
# 1       a      se      my                6                  6
# 2       a      ty      my                5                  5
# 3       a      mi      re                4                  4

如果我们为列表命名,则会得到更好的输出。

with(df, aggregate(list(col4=col4, col5=col5), by=list(col1=col1, col2=col2, col3=col3), sum))
#   col1 col2 col3 col4 col5
# 1    a   se   my    6    6
# 2    a   ty   my    5    5
# 3    a   mi   re    4    4

@Ronak Shah 的建议,我们也可以做到

aggregate(cbind(col4, col5) ~ col1 + col2 + col3, df, sum)

list方法略快。

答案 1 :(得分:0)

使用dplyr:

agg <- df %>% 
  group_by(col2, col3) %>% 
  summarise(col4 = sum(col4),
            col5 = sum(col5))

#   col2  col3   col4  col5
#   <fct> <fct> <dbl> <dbl>
# 1 mi    re        4     4
# 2 se    my        6     6
# 3 ty    my        5     5

您正在寻找什么?