Wie Spalten einer data.frame innerhalb eines data.frame verweisen?
Frage
Ich habe einen data.frame genannt series_to_plot.df, die ich erstellt durch eine Reihe von anderem data.frames zusammen kombiniert (siehe unten). Ich möchte jetzt nur noch die .mm Spalte von jedem von diesen ziehen, so dass ich sie zeichnen kann. Also habe ich die dritte Spalte jeder data.frame (zB p3c3.mm, p3c4.mm etc ...) herausziehen will, aber ich kann nicht ohne Durchschleife für alle data.frames im Objekt sehen, wie dies zu tun der Name. Ist das möglich?
kann ich nur einen Satz herausziehen: z.B. series_to_plot.df [[3]] und eine andere durch
series_to_plot.df [[10]] (so ist es nur eine Liste von Vektoren ..) und ich kann direkt mit series_to_plot.df $ p3c3.mm verweisen, aber gibt es einen Befehl, einen Vektor erhalten von jedem Daten alle MMs enthält. Rahmen? Ich habe erwartet, einen Index, so etwas zu arbeiten: series_to_plot.df [3 [3]], aber es gibt Fehler in [.data.frame
(series_to_plot.df, 3 [3]): undefined Spalten ausgewählt
series_to_plot.df
p3c3.rd p3c3.day p3c3.mm p3c3.sd p3c3.n p3c3.noo p3c3.no_NAs
1 2010-01-04 0 0.1702531 0.04003364 7 1 0
2 2010-01-06 2 0.1790594 0.04696674 7 1 0
3 2010-01-09 5 0.1720404 0.03801756 8 0 0
p3c4.rd p3c4.day p3c4.mm p3c4.sd p3c4.n p3c4.noo p3c4.no_NAs
1 2010-01-04 0 0.1076581 0.006542157 6 2 0
2 2010-01-06 2 0.1393447 0.066758781 7 1 0
3 2010-01-09 5 0.2056846 0.047722862 7 1 0
p3c5.rd p3c5.day p3c5.mm p3c5.sd p3c5.n p3c5.noo p3c5.no_NAs
1 2010-01-04 0 0.07987147 0.006508766 7 1 0
2 2010-01-06 2 0.11496167 0.046478767 8 0 0
3 2010-01-09 5 0.40326471 0.210217097 7 1 0
Lösung
zu den anderen Antworten hinzuzufügen, ich glaube nicht, ist es eine gute Idee ist, nützliche Informationen in Variablennamen codiert zu haben. Viel besser, um Ihre Daten neu anordnen, so dass alle notwendigen Informationen in dem Wert einer Variablen ist. Ich weiß nicht genug über Ihren Datensatz das richtige Format vorschlagen, aber es könnte so etwas wie
seinp c rd day date mm sd ...
3 3 2010-10-04 ...
Wenn Sie diese die Antwort auf Ihre Frage haben wird die einfache df$mm
.
Wenn Sie die Daten in einer weniger nützlichen Form von einer externen Quelle bekommen, können Sie es in einer nützlicheren Form wie die oben in R mit der reshape
Funktion oder Funktionen aus dem reshape
Paket neu anordnen.
Andere Tipps
Um alle Spalten mit angegebenen Namen erhalten Sie tun können:
names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE)
series_to_plot.df[, names_with_mm]
Aber wenn Sie Ihre Basis data.frame
ist alles die gleiche Struktur haben, dann können Sie sie rbind
, so etwas wie:
series_to_plot.df <- rbind(
cbind(name="p3c3", p3c3),
cbind(name="p3c4", p3c4),
cbind(name="p3c5", p3c5)
)
Dann mm
Werte sind in einer Spalte und die leichter zu plotten.
Die R Sprache Definition einige gute Informationen über die Indizierung (sec 3.4.1) hat, das ist ziemlich hilfreich .
Sie können dann die Namen ziehen, um eine Sequenz mit dem grep () Befehl entspricht. Dann Zeichenkette, die es alle zusammen wie folgt:
dataWithMM <- series_to_plot.df[,grep("[P]", names(series_to_plot.df))]
es ein wenig dekonstruieren, wird dies die Anzahl der Spalten, die die „mm“ Muster entsprechen:
namesThatMatch <- grep("[mm]", names(series_to_plot.df)
Dann benutzen wir diese Liste die Spalten nennen wir wollen:
dataWithMM <- series_to_plot.df[, namesThatMatch ]