我有一个20列的data.frame。前两个是因素,其余是数字。我想将前两列用作分割变量,然后将mean()
应用于其余列。ddply如何处理“拆分”变量的因素?
对于ddply()
,这看起来像一个快速简单的工作,但是,输出data.frame的结果并不是我正在寻找的。下面是只用一个数据的列的最小例如:
Aa <- c(rep(c("A", "a"), each = 20))
Bb <- c(rep(c("B", "b", "B", "b"), each = 10))
x <- runif(40)
df1 <- data.frame(Aa, Bb, x)
ddply(df1, .(Aa, Bb), mean)
的输出是:
Aa Bb x
1 NA NA 0.5193275
2 NA NA 0.4491907
3 NA NA 0.4848128
4 NA NA 0.4717899
Warning messages:
1: In mean.default(X[[1L]], ...) :
argument is not numeric or logical: returning NA
警告重复8次,大概是一旦为每个呼叫到mean()
。我猜这是因为试图采取一个因素的意思。我可以这样写:
ddply(df1, .(Aa, Bb), function(df1) mean(df1$x))
或
ddply(df1, .(Aa, Bb), summarize, x = mean(x))
两者做的工作(不给NAS),但我宁愿避免编写出18个这样的x = mean(x)
报表,每一个我的数字的列。
是否有一个通用的解决方案?如果在其他地方有更好的答案,我不会接受ddply
。
作为聚合所有,但自变量,尝试:骨料(〜AA + BB,数据= DF1,平均) – kohske 2011-03-27 05:22:59