我有一个 20 列的 data.frame。前两个是因子,其余是数字。我想将前两列用作拆分变量,然后将其mean()
应用于其余列。
这似乎是一项快速而简单的工作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))
两者都有效(不给出 NA),但我宁愿避免写出 18 个这样x = mean(x)
的语句,每个数字列都有一个。
有没有通用的解决方案?ddply
如果在其他地方有更好的答案,我不同意。