2012-11-29 7 views
4

У меня есть csv загрузка данных из системы управления информацией. Существуют некоторые переменные, которые являются датами и записываются в csv как строки формата «2012/11/16 00:00:00».Как обрабатывать пустые элементы при преобразовании дат в R

После чтения в файле csv я преобразую переменные даты в дату, используя функцию as.Date(). Это отлично подходит для всех переменных, которые не содержат пустых элементов.

Для тех, которые действительно содержат пустые элементы, которые я получаю следующее сообщение об ошибке: «строка символов не в стандартном формате недвусмысленного»

Как я могу получить R заменить пустые элементы с чем-то вроде «0000/00/00 00:00:00 ", чтобы функция as.Date() не прерывалась? Существуют ли другие подходы, которые вы могли бы порекомендовать?

+3

'as.Date (c:« 2012/11/16 00:00:00 », NA))' отлично работает для меня, поэтому я предполагаю, что у вас есть что-то другое, кроме NA в этих пустых полях. Вероятно, было бы лучше всего изменить эти пустые поля на НС. Не могли бы вы разместить подмножество своих данных с помощью 'dput()'? –

+0

Данные имеют либо дату, либо строку "". Ниже представлен конденсированный выход из dput(): struct (c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L , 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 9L, 9L), .Label = c ("", "2012/10/04 00:00:00", "2012/10/09 00:00:00 "," 2012/10/15 00:00:00 "," 2012/11/02 00:00:00 ", " 2012/11/12 00:00:00 "," 2012/11/15 00:00:00 "," 2012/11/16 00:00:00 ", " 2012/11/19 00:00:00 "," 2012/11/30 00:00:00 "), class =" factor ") –

+0

см. комментарий ниже моего ответа о факторах ... –

ответ

3

Если они ниточки, делает что-то же просто, как

mystr <- c("2012/11/16 00:00:00"," ","") 
mystr[grepl("^ *$",mystr)] <- NA 
as.Date(mystr) 

работы? (Регулярное выражение "^ *$" ищет строки, состоящие из начала строки (^), ноль или больше пробелов (*), за которым следует конец строки ($). В общем, я думаю, вы могли бы использовать "^[[:space:]]*$" для захвата других видов неиспользованного (вкладки и т.д.)

+0

Попытка сделать это сейчас. –

+0

Будьте осторожны с факторами, вы можете захотеть сначала 'as.character()' их - 'grepl' может работать странно по факторам. –

+0

Это странно, не так ли? Как R по умолчанию использует все факторы, когда вы используете read.csv() для чтения данных. Кажется, что работал grep. Я просто просматриваю результаты, чтобы убедиться, что он работает нормально. –

0

Даже лучше, иметь NAs вставлена ​​правильно, когда вы читаете в CSV:

read.csv(..., na.strings='') 

или указать вектор всех значений, которые должны быть считаны, как NA .. .

read.csv(..., na.strings=c('',' ',' '))