所以我有一个像这样的结构表
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)
如果有人可以帮忙,我真的很感激.
我们可以使用其中一个聚合函数来解决这类问题.在这里,我用dplyr.我们group_by'id'和summarise'V1'和'V2'列有mean和sum那些相应的列.
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'分组,我们得到mean和sum列.
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)