2016-07-13 7 views
-3

Ich versuche, csv Werte lesen as.date mit R. Meine CSV-Datei nur eine Spalte mit den Daten enthalten verzeichnet, wie folgend:Lesen csv Werte as.date NA zurück

 x 
1 20010101 
2 20010117 
3 20010201 
4 20010217 
5 20010301 
6 20010317 
7 20010401 
8 20010417 
9 20010501 
10 20010517 

und das Skript i verwendet:

d <- read.csv("D:\\test.csv", header = TRUE, sep = "", stringsAsFactors = FALSE) 
> str(d) 
'data.frame': 345 obs. of 1 variable: 
$ x: int 20010101 20010117 20010201 20010217 20010301 20010317 20010401 20010417 20010501 20010517 ... 
date_EVI <- as.Date(paste(d$x), "%mm%dd%YYYY") 

Aber die Erträge sind alle NA.

Bitte um Rat fragen?

+1

Sie könnten versuchen, date_EVI <- as.Date (d $ x, "% Y% m% d") '. – RHertel

+0

und verwenden Sie 'as.character' anstelle von' paste', verwenden Sie besser eine Funktion, deren Aufgabe es ist, Typ zu erzwingen, als eine höhere Ebene für diesen Fall. – Tensibai

+1

Siehe 'as.Date' (direkter, siehe'? Strptime') – MichaelChirico

Antwort

0

Es scheint, dass Ihr Datumsformat falsch ist. Versuchen Sie %Y%m%d.

Zum Beispiel:

dates <- c("20010101", "20010117", "20010517") 
as.Date(dates, "%Y%m%d") 

Und auf Ihren Code angewendet:

d <- read.csv("D:\\test.csv", header = TRUE, sep = "", stringsAsFactors = FALSE) 
date_EVI <- as.Date(as.character(d$x), "%Y%m%d") 
+0

Ich habe 345 Daten, wenn Sie einfache Möglichkeit kennen, um sie so zu schreiben, wie Sie erwähnt haben, lassen Sie mich es wissen .... – NAmo

+0

'as.Date' ist eine Funktion, die eine Liste von Werten nimmt. In Ihrem Fall ist "d" Spalte "x" eine Liste von Strings, also: 'as.Date (d $ x,"% Y% m% d ")' – sdgfsdh

-1

Thanks a lot für alle Vorschläge.

Änderung dieser Zeile:

`date_EVI <- as.Date(paste(d$x), "%mm%dd%YYYY")` 

Um dies:

date_EVI <- as.Date(as.character(d$x), "%Y%m%d") 

Hat gelöst perfekt das Problem. Danke Tensibai