Ошибка столбца даты R с использованием data[data==] ‹- NA

Я работаю с набором данных, в котором есть все виды классов столбцов, включая класс «Дата». Я пытаюсь присвоить NA всем пустым значениям в этом наборе данных следующим образом:

data[data==""] <- NA

Очевидно, что столбец даты создает здесь некоторые проблемы, потому что возникает следующая ошибка:

Error in charToDate(x) : 
character string is not in a standard unambiguous format

Я действительно не знаю, почему возникает эта ошибка, поскольку в столбце даты нет пустых значений, поэтому там ничего не должно происходить. Даты в столбце даты представлены в стандартном формате "%Y-%m-%d".

В чем здесь проблема и как ее решить?


person RomanB    schedule 10.06.2015    source источник


Ответы (1)


Вы можете создать логический индекс для подмножества столбцов, отличных от класса «Дата», и использовать его для замены '' на NA

 indx <- sapply(data, class)!='Date'
 data[indx][data[indx]==''] <- NA

Это класс «Дата», который создает проблему. Другой вариант — преобразовать данные в matrix, чтобы все столбцы были character.

 data[as.matrix(data)==''] <- NA

Или, как предложил @Frank (и используя replace)

 data[indx] <- lapply(data[indx],  function(x) replace(x, which(x==''), NA))

данные

 set.seed(49)
 data <- data.frame(Col1= sample(c('',LETTERS[1:3]), 10, replace=TRUE), 
      Col2=sample(c('',LETTERS[1:2]), 10, replace=TRUE), 
      Date=seq(as.Date('2010-01-01'),length.out=10, by='day'),
       stringsAsFactors=FALSE)
person akrun    schedule 10.06.2015
comment
Другой вариант: data[] <- lapply(data,function(x){if(is.character(x)) x[x==""] <- NA_character_; x}) или data[indx] <- lapply(data[indx],function(x){x[x==""] <- NA_character_; x}) - person Frank; 10.06.2015
comment
Большое спасибо! Я буду использовать комбинацию lapply-replace (и использовать пакет lubridate), как в следующем примере: as.data.frame(lapply(data, function(x) if(!is.Date(x)) replace( х, х ==, NA) иначе х)) - person RomanB; 10.06.2015