2013-11-21 2 views
1

Я получаю предупреждения, когда пытаюсь читать vector a, который содержит много дат.Lubridate предупреждение о дате синтаксиса

Вот текстовый файл для vector a, который я сделал с помощью write(a,"a.txt"). Поскольку он довольно большой, я привязал его на диске Google для тех, кто загружается. В основном, он содержит даты с 2012-01-01 по 2012-12-31, повторяется много раз.

https://drive.google.com/file/d/0B12dCpdCVHeSZjA4YmVXNmV6VUU/edit?usp=sharing

Я пытался сделать это и получил предупреждение.

> head(ymd(a)) 
[1] "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" 
[6] "2012-01-01 UTC" 
Warning message: 
7202 failed to parse. 

Глядя на предупреждающее сообщение, было бы легко предположить, что формат даты неверен. Тем не менее, YYYY-MM-DD - это формат, поддерживаемый lubridate. Когда я делаю то же самое с частью вектора, ничего не происходит.

> head(ymd(a[1:50000])) 
[1] "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" "2012-01-01 UTC" 
[6] "2012-01-01 UTC" 

Использование strptime и as.Date также не вызывает каких-либо ошибок

> head(strptime(a,format="%Y-%m-%d")) 
[1] "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" 
> head(as.Date(a)) 
[1] "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" 

Мой вопрос, нужно ли мне беспокоиться о предупреждающего сообщения или я могу спокойно игнорировать его?

+2

Я получаю значения типа «2012-03-01 (1)» от номера строки 122241 и далее. Я не знаю, может быть, я ошибаюсь, но из-за этого вы можете получить предупреждение. – PKumar

+0

Ах, вот и все. Спасибо! –

ответ

2
> b <- which(is.na(ymd(as.character(a[[1]]), tz="UTC"))) 
Warning message: 
7202 failed to parse. 
> head(b) 
[1] 122241 122242 122243 122244 122245 122246 
> as.character(a[[1]])[head(b)] 
[1] "2012-03-01(1)" "2012-03-01(1)" "2012-03-01(1)" "2012-03-01(1)" "2012-03-01(1)" 
[6] "2012-03-01(1)" 

Похоже, есть строки таких аномальных дат, разделенных большими промежутками:

rle(diff(b)) 
Run Length Encoding 
    lengths: int [1:15] 1183 1 831 1 928 1 605 1 639 1 ... 
    values : int [1:15] 1 111657 1 29857 1 26065 1 25111 1 65729 ... 
+1

Это отличный ответ, но было бы неплохо, если бы мы могли напрямую обращаться к данным, вызывающим предупреждение. –

0

Различные решения, использующие пакет anydate, который, кажется, работает.

library(anydate) 
text <- anydate(a[, 1]) 
sum(is.na(text)) 

# 0 
Смежные вопросы