具有混合数据类型的自动数据框摘要

时间:2013-04-09 12:31:08

标签: r dataframe summary

我正在尝试自动创建一个新的数据框,在给定现有数据框的情况下,该数据框包含数值变量的中值或者因子的最常见类别。所以:

Number Factor  
3      A
2      A
5      B

应该变成

Number Factor  
3      A

我可以单独为每个变量计算它。对于纯数值变量,我甚至可以使用colMeans命令。对于纯粹的因子变量,我会使用which.max()。但我无法将这两者合并为可扩展的灵活解决方案

3 个答案:

答案 0 :(得分:2)

您可以lapply使用if分支:

y <- read.table(text = "Number Factor  
3      A
2      A
5      B", header = TRUE)

as.data.frame(lapply(y, function(x) {
if (is.numeric(x)) return (median(x))
else return(x[which.max(table(x))])
}))

答案 1 :(得分:1)

你可以测试类似的东西:

FUN <- function(x) {
  if (is.numeric(x)) 
     return(median(x))
  else 
     x <- sort(as.character(x))
  rl1 <- rle(x)
  rl1$val[which.max(rl1$le)]
  }

as.data.frame(lapply(tab, FUN))
aggregate(tab, by=list(gl(1,nrow(tab))), FUN=FUN)
# even easier
bob <- lapply(tab, function(x) if(is.numeric(x)) median(x) else x[median(as.numeric(x))])
as.data.frame(bob)

答案 2 :(得分:1)

as.data.frame( lapply(dfrm, function(x) if(is.numeric(x)) {
                            median(x) } else {
                            names(sort( table(x) , decreasing=TRUE )[1])
                                             })
              )