Ошибка в методе визуализации пропущенных значений - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь визуализировать пропущенные значения (NA) в кадре data.frame, содержащем набор данных Hepatitis и использующем пакет VIM. Я пытаюсь сделать это с помощью функции spineMiss:

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

Но я получаю следующую ошибку:

Ошибка в createPlot (main, sub, xlab, ylab , метки): (список) объект не может быть приведен к типу 'double'

Это str кадра данных:

enter image description here

Если я использую такую ​​функцию:

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

Я не получаю никакой ошибки, но результат не имеет особого смысла. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

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 голосов
/ 15 февраля 2020

Я пришел к выводу, что ошибка связана со структурой самого data.frame. Он был создан не мной с кодом R, а считан из файла. После прочтения я выполнил некоторую предварительную обработку (преобразование типов и т. Д. c). str(hepatitis) показывает, что исходная спецификация атрибутов data.frame все еще сохраняется в нем. Я не совсем понимаю, как это приводит к неисправности spineMiss, но, безусловно, в этом проблема root.

Я решил ее, создав новый 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")])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...