我想生成包含多个变量的每个因子级别的摘要统计数据的数据帧。
例如,如果我有以下数据框
Factor <- c("A","A","A","B","B","B")
Variable1 <- c(3,4,5,4,5,3)
Variable2 <- c(7,9,14,16,10,10)
mydf <- data.frame(Factor, Variable1, Variable2)
mydf
Factor Variable1 Variable2
1 A 3 7
2 A 4 9
3 A 5 14
4 B 4 16
5 B 5 10
6 B 3 10
我有以下功能,我想用它来制作我的摘要统计数据:
my.summary <- function(x, na.rm=TRUE){result <- c(n=as.integer(length(x)),
Mean=mean(x, na.rm=TRUE), SD=sd(x, na.rm=TRUE), SeM = SEM(x),
Median=median(x), Min=min(x), Max=max(x))}
要将此应用于Variable1的因子级别,我可以这样做:
ddply(mydf, c("Factor"), function(x) my.summary(x$Variable1))
Factor n Mean SD SeM Median Min Max
1 A 3 4 1 0.5773503 4 3 5
2 B 3 4 1 0.5773503 4 3 5
现在我可以对变量2执行相同的操作:
ddply(mydf, c("Factor"), function(x) my.summary(x$Variable2))
如果我只有2个变量,这很容易。但是,如果我有很多变量,这将是一个痛苦。那么如何解决这个问题,以便我可以为每个变量/因子级别生成摘要统计数据的数据框,而无需调整代码?
我尝试过使用aggregate.data.frame但是使用my.summary无效。它使用摘要工作,但产生一个大数据框。
由于
答案 0 :(得分:2)
我们可以使用data.table
library(data.table)
setDT(mydf)[, unlist(lapply(.SD, my.summary),recursive=FALSE), Factor]
my.summary <- function(x, na.rm=TRUE){list(n= length(x),
Mean=mean(x),
SD=sd(x),
Median=median(x),
Min=min(x),
Max=max(x))}