【问题标题】:Error in method to visualize missing values可视化缺失值的方法错误
【发布时间】:2020-02-14 18:29:25
【问题描述】:

我正在尝试在包含肝炎数据集并使用包VIM 的data.frame 中可视化缺失值(NA)。我正在尝试通过使用函数spineMiss

spineMiss(hepatitis[, c("PRONOSTICO", "PROTIME")])

但我收到以下错误:

createPlot 中的错误(主、子、xlab、ylab、标签):(列表)对象 不能强制输入'double'

这是数据框的str

如果我使用这样的功能:

a <- hepatitis$PRONOSTICO
b <- hepatitis$PROTIME
spineMiss(c(a,b))

我没有收到任何错误,但结果没有多大意义。我做错了什么?

【问题讨论】:

  • 你能显示str(hepatitis)
  • 我已经编辑了问题以添加该信息@akrun
  • 它将PRONOSTICO 显示为factor 而不是numeric

标签: r na


【解决方案1】:

文档中的data 工作正常

library(VIM)
data(tao, package = "VIM")
## for missing values
spineMiss(tao[, c("Air.Temp", "Humidity")])

这两列都是numeric

str(tao[, c("Air.Temp", "Humidity")])
#'data.frame':  736 obs. of  2 variables:
# $ Air.Temp: num  27.1 27 27 26.9 26.8 ...
# $ Humidity: num  79.6 75.8 76.5 76.2 76.4 76.7 76.5 78.3 78.6 76.9 ...

由于其中一列是factor,它可以用作第一个变量。它没有给出任何错误

set.seed(24)
hepatitis <- data.frame(PROTIME = sample(c(NA, 80:95), 100,
  replace = TRUE), PRONOSTICO = sample(c("FALLECE", "VIVE"), 
 100, replace = TRUE))

spineMiss(hepatitis[c("PRONOSTICO", "PROTIME")])

【讨论】:

  • 我用过你的代码,用地雷修改数据框和列名。但它仍然给我同样的错误。 @akrun
  • @Sergio6Rey 因为我认为它是list 列,但PRONOSTICO 列却是factor
  • @Sergio6Rey。根据文档if the variable of interest is categorical, either a logical indicating whether labels should be plotted below each cell, or a character vector giving the labels. This is ignored if the variable of interest is numeric.
  • 我不太明白你的评论。我将 PRONOSTICO 列转换为数字,但它仍然给出相同的错误。 @akrun
  • @Sergio6Rey 给我 5 分钟,让我创建一个可重现的示例,因为您没有提供示例
【解决方案2】:

我得出的结论是,该错误与 data.frame 本身的结构有关。它不是我用 R 代码创建的,而是从文件中读取的。阅读后我做了一些预处理(类型转换等)。 str(hepatitis) 表明 data.frame 的属性的原始规范仍然存储在其中。我完全不明白这是如何使spineMiss 发生故障的,但肯定是问题的根源。

我通过创建一个新的 data.frame 并在其中复制前一个的所有数据(从文件中读取并预处理)来解决它:

aux <- data.frame(matrix(ncol = 20, nrow = 0))
colnames(aux) <- atributos
for(i in 1:nrow(hepatitis)){
  aux[i,] = hepatitis[i,]
}
spineMiss(aux[, c("PRONOSTICO", "PROTIME")])

【讨论】:

  • 如果是删除属性,可能你只是as.data.frame(hepatitis)可能工作
  • 正确,这也有效,它是一个类似但更简单的解决方案@akrun
猜你喜欢
  • 2020-12-22
  • 2023-04-04
  • 1970-01-01
  • 2015-08-29
  • 2016-11-10
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2016-07-18
相关资源
最近更新 更多