【问题标题】:summary and descriptive table for mixed data in RR中混合数据的汇总和描述表
【发布时间】:2023-04-02 21:58:01
【问题描述】:

我想创建一个函数来计算一些可以应用于任何数据集的预先确定的汇总统计量度。我将从这里的示例开始,但这是针对可能具有多种数据类型的数据集 - 例如字符、因子、数字、日期、包含空值等。

如果数据都是数字,我可以很容易地做到这一点 - 但是处理带有 apply、sapply 等的 IF 场景是我遇到语法问题的地方。 当它全部是数字时,我很好,因为我可以做 new_df = data.frame(min = sapply(mydf, 2,min).....etc....etc)。当语法更复杂时,我只是无法正确理解语法,如下面的示例所示。

在下面的示例中,我有一个 3 列的数据框:

  • 全数字
  • 带有空值的数字
  • 编码为因子的数据分类列

我想计算:

  • 类型...(字符、因子、日期、数字等)
  • 意思是……当数据类型明显是数字,并且不包括空值
  • 数据集中空值的数量

我认为这很简单,我可以从这里开始运行..

复制并粘贴此代码和名称作为数据框的变量:

  structure(list(allnumeric = c(10, 20, 30, 40), char_or_factor =     structure(c(2L, 
3L, 3L, 1L), .Label = c("bird", "cat", "dog"), class = "factor"), 
num_with_null = c(10, 100, NA, NA)), .Names = c("allnumeric", 
"char_or_factor", "num_with_null"), row.names = c(NA, -4L), class = "data.frame")

预期的解决方案数据框(复制并分配给变量):

  structure(list(allnumeric = structure(c(3L, 2L, 1L), .Label = c("0", 
  "25", "numeric"), class = "factor"), char_or_factor = structure(c(2L, 
  NA, 1L), .Label = c("0", "character"), class = "factor"), num_with_null =     structure(c(3L, 
   2L, 1L), .Label = c("2", "55", "numeric"), class = "factor")), .Names =  c("allnumeric", 
  "char_or_factor", "num_with_null"), row.names = c("type", "mean", 
   "num_nulls"), class = "data.frame")

【问题讨论】:

  • 第二列的类型不应该是factor吗?

标签: r if-statement apply summary sapply


【解决方案1】:

我们可以使用sapply遍历列,获取classmean和NA元素的数量,连接(c()并转换为data.frame

as.data.frame(sapply(df1, function(x) c(class(x), mean(x, na.rm=TRUE), 
                              sum(is.na(x)))), stringsAsFactors=FALSE)

【讨论】:

  • 对不起 - 如果我想对这些值求和或取一个分位数而不是使用平均值怎么办?我在这里收到有关因素/字符值的错误
  • @runningbirds 如果是sum,请使用sum(x, na.rm=TRUE),而不是mean(x, na.rm=TRUE)。如果有factor/character 列,请使用if/else 条件function(x) c(class(x), if(is.numeric(x)) mean(x, na.rm=TRUE) else NA, sum(is.na(x))))
猜你喜欢
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 2019-11-04
  • 2017-10-26
  • 2019-03-25
相关资源
最近更新 更多