多个变量的因子级别的汇总统计信息

时间:2015-11-23 16:36:35

标签: r summary

我想生成包含多个变量的每个因子级别的摘要统计数据的数据帧。

例如,如果我有以下数据框

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无效。它使用摘要工作,但产生一个大数据框。

由于

1 个答案:

答案 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))}