我正在尝试在包含肝炎数据集并使用包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))
我没有收到任何错误,但是结果没有太大意义。我做错了吗?
文档中的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")])
我得出的结论是错误与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")])