【发布时间】:2011-08-12 23:16:41
【问题描述】:
根据分组因素将data.frame 按行拆分是相当容易的。但是如何按列拆分并可能应用函数?
my.df <- data.frame(a = runif(10),
b = runif(10),
c = runif(10),
d = runif(10))
grp <- as.factor(c(1,1, 2,2))
我想要的是按组划分列的平均值。
到目前为止,我所拥有的只是一个穷人的申请。
lapply(as.list(as.numeric(levels(grp))), FUN = function(x, cn, data) {
rowMeans(data[grp %in% x])
}, cn = grp, data = my.df)
编辑 谢谢大家的参与。我运行了 10 次重复*,我的工作 data.frame 大约有 22000 行。这些是以秒为单位的结果。
Roman: 2.19
Joris: 4.60
Joris #2: 3.79 #changed sapply to lapply as suggested by Joris in the [R chatroom][1].
Gavin: 4.70
James & EDi: > 200 # * ran only one replicate due to the large order of magnitude difference
让我感到奇怪的是,手头的任务没有包装函数。也许有一天我们可以做到
apply(X = my.df, MARGIN = 3, INDEX = my.groups, FUN = mean) # :)
【问题讨论】:
-
你的数据框有 10 行,grp 有 4 个值。他们应该如何匹配?
-
@hadley : 数据框有 4 列,grp 有 4 个值,所以匹配...
-
@hadley,我想按列而不是按行拆分,所以我应该匹配 length(my.df) == length(grp)。