Ich arbeite mit mehreren CSV-Dateien in einem Ordner (2488) gespeichert. Jeder csv enthält monatliche Daten von Messstationen mit dem Format Jahre * Monate. Ich möchte alle diese CSV-Dateien in einem großen Datenrahmen speichern, in dem Spalten die IDs der verschiedenen Prüfstationen und die Zeilen die Zeiten% Y-% m-% d sind.Speichern Sie Daten nach Startdatum
Zu diesem Zweck habe ich mit list.files
alle Dateien auflisten:
a <- list.files(pattern="./*.csv",full.names=TRUE)
und erstellen Sie ein Dummy-Datenrahmen mit den endgültigen Abmessungen:
gst <- data.frame(NA,1860,2488) # 1860 times - 2488 stations
Jede CSV-Datei beginnt in einem anderen Datum . Das früheste Datum gefunden ist Januar 1863, so habe ich den Datenrahmen mit 1860 Zeilen aus diesem Startdatum bis 2017. Juni
ich eine Reihe von Daten erstellen, um die Reihen von gst
zu nennen:
s <- paste0(1863,"-01-01")
e <- paste0(2017,"-12-31")
ss<- chron(s, format='y-m-d')
ee<- chron(e, format='y-m-d')
dates <- seq.dates(ss,ee,by='months')
In In der folgenden Schleife lese ich jede CSV-Datei. Zuerst ändere ich das ursprüngliche Datenrahmenformat: Jahre * Monate + Gesamtspalte.
# Initial format
Jan Feb Mar Apr
1993 NA 0.05 0.05 0.06
1994 0.18 0.15 0.1 0.19
1995 0.22 0.23 0.26 0.11
1996 0.14 0.11 0.1 0.08
1997 0.12 0.16 0.07 0.05
1998 0.12 0.07 0.12 0.18
1999 0.07 0.32 0.14 0.15
2000 0.13 0.22 0.15 0.1
2001 0.18 0.09 0.5 0.26
zu einem einzigen Spalte Datenrahmen (kk.df) mit Daten gespeichert, wie:
Date Value
93-01-01 NA
93-02-01 0.05
93-03-01 0.05
93-04-01 0.06
93-05-01 0.05
93-06-01 0.05
93-07-01 0.03
93-08-01 0.03
93-09-01 0.05
93-10-01 0.09
93-11-01 0.04
93-12-01 0.10
Dies ist die Schleife ich arbeiten bin:
for (i in 1:length(a)){
kk <- read.csv(a[i])
colnames(kk) <- c(seq(1,12,1),'total') # 12 (months) columns and a total column
kk.ts <- ts(as.vector(t(as.matrix(kk))),
start=as.numeric(c(rownames(kk)[1],1)), end= as.numeric(c(rownames(kk)[dim(kk)[1]],12)),frequency=12)
kk.df <- as.data.frame(kk.ts)
colnames(kk.df) <- a[[i]]
a <- paste0(start,"-01-01")
b <- paste0(end,"-12-31")
ac<- chron(a, format='y-m-d')
bc<- chron(b, format='y-m-d')
times <- seq.dates(ac,bc, by="months")
rownames(kk.df) <- times
gst[i,] <- kk.df
}
Meine Frage ist, wie ich die gleiche Anzahl von Spalten wie Gaugin Stationen habe ich (2488 Stationen) und jede Station starten zu einem anderen Jahr-Monat, wie kann ich angeben, wenn jedes i
für jede Station, die Zeile, in der es beginnen muss?
Wenn i
= 1 und der erste Datensatz in 1993-01-01 ist, möchte ich, dass die Spalte in der Zeile gst
beginnt, die 1993-01-01 entspricht und so weiter mit dem Rest der Stationen.
Vielen Dank.
Danke Florian Maas, während die linke versuchen -join Ich habe das Problem mit 'index' gelöst: data [roownames (kk.df), colnames (kk.df) [2]] = as.numerisch (as.character (kk.df [2] [[1 ]])) Auf diese Weise immer y gaugin station wird zu dem Zeitpunkt gespeichert, der den rownames entspricht. – Marina
Schön, dass Sie Ihr Problem lösen konnten, froh, dass ich Ihnen helfen konnte! – Florian