可视化缺失值的方法中的错误

问题描述 投票:0回答:2

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

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

但是出现以下错误:

createPlot(主,子,xlab,ylab,标签)中的错误:(列表)对象无法强制输入“ double”

这是数据帧的str

enter image description here

如果我使用这样的功能:

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

我没有收到任何错误,但是结果没有太大意义。我做错了吗?

r na
2个回答
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")])

0
投票

我得出的结论是错误与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")])
© www.soinside.com 2019 - 2024. All rights reserved.