根據分組因子,按行拆分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