Hier ist mein aktuelles Problem. Ich habe eine Liste von Datenrahmen, die aus verschiedenen Werten bestehen. Ich möchte in der Lage sein, durch die Liste von Datenrahmen zu iterieren und bestimmte Datenspalten für jeden Datenrahmen auszuwählen, basierend auf den Namen der Spalten, die ich spezifiziere. Ich möchte dann diese ausgewählten Spalten in einer separaten Liste von Datenrahmen zuweisen.Auswählen bestimmter Spalten in Datenrahmen eingebettet in einer Liste
Ich habe andere Listenobjekte verwendet, die aus den Namen der verschiedenen Spalten bestehen, die ich extrahieren möchte.
Ich habe einen Stich auf ein paar Ansätze genommen, aber ich bin immer noch auf der Kopf kratzen Bühne. Hilfe wäre willkommen!
Hier einige Beispiel-Code, den ich gekocht habe unten nach oben:
# Create sample data set of five data frames, 10 x 10
M1 <- data.frame(matrix(rnorm(5), nrow = 10, ncol = 10))
M2 <- data.frame(matrix(rnorm(10), nrow = 10, ncol = 10))
M3 <- data.frame(matrix(rnorm(15), nrow = 10, ncol = 10))
M4 <- data.frame(matrix(rnorm(20), nrow = 10, ncol = 10))
M5 <- data.frame(matrix(rnorm(25), nrow = 10, ncol = 10))
# Assign data frames to a list object
mlist<-list(M1, M2, M3, M4, M5)
# Creates a data frame object consisting of the different column names I want to extract later
df.names <- data.frame(One = c("X1", "X3", "X5"), Two = c("X2", "X4", "X6"))
# Converts df.names into a set of characters (not sure if this is needed but it has worked for me in the past)
df.char <- lapply(df.names, function(x) as.character(x[1:length(x)]))
# Creates variable m that will be used to iterate in the for loops below
m<-1:length(mlist)
# Creates list object to set aside selected columns from df.names
mlist.selected<-list()
# A for loop to iterate for each of the df.names elements, and for each dataframe in mlist. *Hopefully* select out the columns of interest labeled in df.names, place into another list object for safe keeping
for (i in 1:length(df.names))
{
for(j in m)
{
#T his is the line of code I'm struggling with and I know it doesn't work. :-(
mlist.selected[j]<-lapply(mlist, function(x) x[df.char[[i]]])
}
}
I gefunden Vereinfachung der for-Schleife resultiert in der Ausgabe, die optimal ist für .... (i in 1: Länge (df.names)) { mlist.selected [[Paste ("m", i , Namen (df.name) [i], sep = ".")]] <- lapply (mlist, Funktion (x) x [df.char [[i]]]) } – mjtat
Rechts. Das steht am Ende meiner Antwort. Ich habe sogar ein wenig hinzugefügt, um Ihnen die richtigen data.frame-Namen von mlist zu geben. Schau mal. – lmo
Danke für die Hilfe! – mjtat