R - merge eine Liste von Daten-frames in einen data frame mit fehlenden Werten durch die Reihe
Habe ich eine variation auf die ach-so-common Problems, wie verschmelzen die Dinge miteinander in R.
Habe ich eine Reihe von .txt-Dateien in einem bestimmten Ordner, und ich habe geschrieben eine Funktion, die:
- macht eine Liste der Dateien, die ich will, und dann für jede Datei
- liest die Datei
- Teilmengen der Daten (zum extrahieren der Zeilen und Spalten, die von Interesse)
- hat einige Berechnungen auf den Daten
- fügt diese neuen Werte zu einer Liste.
Was ich am Ende mit ist eine Liste mit der folgenden Struktur:
>str(DataList)
List of 16
$ :'data.frame': 14 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ Var1 : num [1:14] 27.9 33.8 29.9 29.4 28.8 ...
$ :'data.frame': 14 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ Var2 : num [1:14] 24.6 27 26.8 26.7 27.2 ...
$ :'data.frame': 12 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 9 11 12 ...
..$ Var3 : num [1:12] 31.4 35.6 34 35.7 32.5 ...
Für jede variable (Var1, Var2, Var3,
...) ich habe eine Spalte Sample
und eine Spalte mit numerischen Werten.
Sample
ist immer ein Faktor, mit 14 Stufen; diese Ebenen sind die gleichen für jede variable.
Das problem ist, dass einige Variablen (wie Var3
oben) haben keine Beobachtungen für jede Ebene der Sample
.
Was ich will, um am Ende mit ist ein Daten-frame mit 14 Zeilen (eine für jede Ebene von Sample
). Die erste Spalte sollte Sample
; dann für jede variable, sollte es eine Spalte enthält die entsprechenden numerischen Werte, etwa so:
Sample Var1 Var2 Var3
Sample_1A 27.9 24.6 31.4
Sample_1B 33.8 27 35.6
...
Sample_3B 26.8 29.7 NA
Ich versucht habe zu tun, diese mit do.call
, aber nicht wissen, wie die übergabe von Argumenten für by
; cbind
wird unglücklich, weil die fehlenden Werte. Irgendwelche Gedanken auf, wie dies zu tun?
Dank!
EDIT: Wie pro joran Anfrage:
>dput(DataList[1:3])
list(structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var1 = c(26.9333333333333, 29.17, 28.9366666666667, 28.9233333333333, 28.61, 28.63, 26.7933333333333, 34.6633333333333, 30.4966666666667, 28.4433333333333, 27.4533333333333, 28.3, 27.9633333333333, 27.2366666666667)), .Names = c("Sample", "Var1"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var2 = c(24.19, 26.6033333333333, 26.0366666666667, 27.6766666666667, 27.61, 27.5633333333333, 25.1566666666667, 33.7266666666667, 27.7, 26.1466666666667, 25.65, 26.3633333333333, 25.5333333333333, 26.1733333333333)), .Names = c("Sample", "Var2"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 11L, 12L, 13L, 14L), .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var3 = c(31.4133333333333, 35.56, 33.9666666666667, 35.66, 32.4633333333333, 31.99, 31.3133333333333, 36.34, 34.9433333333333, 34.5433333333333, 34.3766666666667, 33.28)), .Names = c("Sample", "Var3"), row.names = c(NA, -12L), class = "data.frame"))
- Könntest du bitte die Ausgabe von
dput(DataList[1:3])
bitte? - mögliche Duplikate von R: Zusammenführen einer Menge von Daten.frames
- möglich, Duplikat der verbinden Sie mehrere Daten-frames in einer Liste gleichzeitig
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie ein lehrbuch-Fall für
Reduce
.