【问题标题】:Automated data frame summaries with mixed data types具有混合数据类型的自动数据框摘要
【发布时间】:2013-04-09 12:31:08
【问题描述】:

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

Number Factor  
3      A
2      A
5      B

应该变成

Number Factor  
3      A

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

【问题讨论】:

  • 我很困惑,您是否将Number 列求和为最常见的因素?
  • 你的中位数肯定是 3?
  • 是的,当然是。在我的脑海中转换了中值和平均值的概念。感谢您的清理。

标签: r dataframe summary


【解决方案1】:

您可以使用 lapplyif 分支:

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))])
}))

【讨论】:

  • 我不认为返回一个模式,而是返回一个因子的最后一个级别。
  • 只需对其进行编辑以使用which.max(table(x)) 即可。来自我的 +1
  • @SimonO101 感谢您注意到这一点。
【解决方案2】:

你可以测试类似的东西:

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)

【讨论】:

    【解决方案3】:
    as.data.frame( lapply(dfrm, function(x) if(is.numeric(x)) {
                                median(x) } else {
                                names(sort( table(x) , decreasing=TRUE )[1])
                                                 })
                  )
    

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多