我需要在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
答案 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
您正在寻找什么?