根据分组因子,按行拆分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次重复*,我的工作数据帧大约有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 2011-04-26 13:14:09
@hadley:数据框有4列,grp有4个值,所以匹配... – 2011-04-26 13:26:54
@hadley,我想分割列,而不是行,所以我应该匹配长度(my.df)==长度(GRP)。 – 2011-04-26 13:35:18