如何根据每个ID汇总R中的表

Ken*_*Lam 2 aggregate r

所以我有一个像这样的结构表

id   V1    V2
101, 500,   1
101, 600,   1
102, 300,   0
102, 300,   0
102, 400,   0
102, 100,   1
103, 200,   0
103, 400,   0
104, 200,   1
Run Code Online (Sandbox Code Playgroud)

基本上对于每个id,我想计算V1的平均值和V2的总和,所以新表应该是这样的

id   V1    V2
101, 550,  2
102, 275,  1
103, 400,  0
104, 200,  1
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮忙,我真的很感激.

akr*_*run 6

我们可以使用其中一个聚合函数来解决这类问题.在这里,我用dplyr.我们group_by'id'和summarise'V1'和'V2'列有meansum那些相应的列.

library(dplyr)
df1 %>% 
    group_by(id) %>%
    summarise(V1=mean(V1, na.rm=TRUE), V2= sum(V2, na.rm=TRUE))
#   id  V1 V2
#1 101 550  2
#2 102 275  1
#3 103 300  0
#4 104 200  1
Run Code Online (Sandbox Code Playgroud)

或者另一个选择是data.table.我们将'data.frame'转换为'data.table'(setDT(df1)),按'id'分组,我们得到meansum列.

library(data.table)
setDT(df1)[, list(V1=mean(V1, na.rm=TRUE), V2= sum(V2, na.rm=TRUE)), by = id]
#    id  V1 V2
#1: 101 550  2
#2: 102 275  1
#3: 103 300  0
#4: 104 200  1
Run Code Online (Sandbox Code Playgroud)

或使用 base R

do.call(rbind, by(df1, df1[1], FUN=function(x) 
      data.frame(id=x[1,1], V1= mean(x[,2], na.rm=TRUE), 
                            V2=sum(x[,3], na.rm=TRUE))))
Run Code Online (Sandbox Code Playgroud)