Apply several summary functions on several variables by group in one call

前端 未结 7 1456
一个人的身影
一个人的身影 2020-11-22 00:03

I have the following data frame

x <- read.table(text = \"  id1 id2 val1 val2
1   a   x    1    9
2   a   x    2    4
3   a   y    3    5
4   a   y    4            


        
7条回答
  •  隐瞒了意图╮
    2020-11-22 00:26

    You could add a count column, aggregate with sum, then scale back to get the mean:

    x$count <- 1
    agg <- aggregate(. ~ id1 + id2, data = x,FUN = sum)
    agg
    #   id1 id2 val1 val2 count
    # 1   a   x    3   13     2
    # 2   b   x    4   16     2
    # 3   a   y    7   14     2
    # 4   b   y    6   12     2
    
    agg[c("val1", "val2")] <- agg[c("val1", "val2")] / agg$count
    agg
    #   id1 id2 val1 val2 count
    # 1   a   x  1.5  6.5     2
    # 2   b   x  2.0  8.0     2
    # 3   a   y  3.5  7.0     2
    # 4   b   y  3.0  6.0     2
    

    It has the advantage of preserving your column names and creating a single count column.

提交回复
热议问题