这就是我想要做的。我的数据框有一个因子变量“国家”,我想根据国家来分割数据框。然后,我想对每个国家/地区数据框的每个变量取均值。

此处的数据:https://github.com/pourque/country-data

到目前为止,我已经做到了...

myList <- split(df1, df1$country)
for(i in 1:length(myList)) {
aggregate <- mapply(myList[[i]][,-c(38:39)], colMeans)
}

(我不包括第38和39列,因为这些是因素。)

我已经读过这个(function over more than one list),这使我认为mapply是这里的答案...但是我遇到了这个错误:
Error in match.fun(FUN) :
'myList[[i]][, -c(38:39)]' is not a function, character or symbol

也许我格式化不正确?

最佳答案

数据表答案:

library(data.table)

setDT(df1)[, lapply(.SD, mean), by = country, .SDcols = -c('age', 'gender')]

现在,由于用户Arun,在.SDcols中取消选择的语法更加整洁

要解释这里发生了什么:
  • setDT(df1)使data.frame成为data.table
  • 数据子集中每一列的
  • lapply(.SD, mean),取mean
  • by = county通过根据country分组的组来执行此操作
  • .SDcols = -c('age', 'gender')从数据
  • 的子集中省略agegender

    关于r - 在R中的数据帧列表上取列均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30035592/

    10-12 16:43
    查看更多