0

我想按“col1”、“col2”分组并获得 col3 的平均值

newData
id    col1   col2    col3   col4   col5
1     200    2000    150     151    NA
2     200    2000    250     160   "tim"
3     201    2000    300     189    NA
4     201    2000    400     182    NA

我希望我的输出是

id    col1   col2    col3   col4    col5
1     200    2000    200     151     NA    
2     201    2000    350     189     NA

aggdata <-aggregate(newData, 
                by=list(newData$col1,newData$col2), 
                FUN=mean, na.rm=TRUE)

这给了我所有我不想要的变量的平均值。

4

2 回答 2

1

也许您正在寻找merge两个aggregates:

out <- merge(aggregate(col3 ~ col1 + col2, mydf, mean, na.rm = TRUE),
             aggregate(cbind(col4, col5) ~ col1 + col2, 
                       mydf, `[`, 1, na.action = na.pass),
             by = c("col1", "col2"))
out <- cbind(id = 1:nrow(out), out)
out
#   id col1 col2 col3 col4 col5
# 1  1  200 2000  200  151 <NA>
# 2  2  201 2000  350  189 <NA>

第一个aggregate采用mean“col3”。第二个aggregate分别提取“col4”和“col5”的第一个元素。

我手动创建了一个“id”列,因为在您的示例中,输出中的“id”列似乎不适合任何可识别的模式。

于 2013-09-05T10:45:54.267 回答
1

这没有多大意义,但这里有一个替代方案

> cbind(aggregate(col3~col1+col2, data=newData, FUN="mean"),
        newData[!duplicated(newData[, "col1"]), c("col4", "col5")])
  col1 col2 col3 col4 col5
1  200 2000  200  151 <NA>
3  201 2000  350  189 <NA>
于 2013-09-05T10:45:56.750 回答