Ich habe eine sehr einfache Frage über lapply. Ich wechsle von STATA zu R und ich denke, dass es ein sehr grundlegendes Konzept gibt, das ich in R nicht verstehe. Aber ich habe den ganzen Nachmittag darüber gelesen und kann keinen vernünftigen Weg finden, diese sehr einfache Sache zu machen .Rückkehr von der Liste zu data.frame nach dem Lapply
Ich habe drei Datenrahmen DF1, DF2 und DF3, die alle die gleichen Spaltennamen haben, in der gleichen Reihenfolge, usw.
ich auf einmal ihre Spalten umbenennen möchten.
habe ich den Datenrahmen in einer Liste:
dflist <- list(df1, df2, df3)
Was ich die neuen Namen sein will: eine Funktion
varlist <- c("newname1", "newname2", "newname3")
schreiben, deren Namen mit denen in varlist ersetzt, und lapply es über die Datenrahmen
ChangeNames <- function(x) {
names(x) <- varlist
return(x)
}
dflist <- lapply(dflist, ChangeNames)
So weit ich verstehe, hat R die Namen der Kopien der geändert Datenrahmen, die ich in die Liste einfüge, aber nicht die ursprünglichen Datenrahmen selbst. Ich möchte die Datenrahmen selbst umbenannt werden, nicht die Elemente der Liste (die in einer Liste gefangen sind).
Jetzt kann ich
df1 <- as.data.frame(dflist[1])
df2 <- as.data.frame(dflist[2])
df2 <- as.data.frame(dflist[3])
gehen Aber das scheint seltsam. Sie benötigen eine Schleife, um die Elemente einer Schleife zurückzubekommen?
Grundsätzlich: Sobald Sie einige Datenrahmen in eine Liste eingefügt haben und Ihre Funktion über sie ausführen, wie erhalten Sie sie wieder aus der Liste, ohne auf Platz eins zurück zu starten?
ich die mehr R Art und Weise denken Sie gehen über den 3-Daten zu binden, wäre Rahmen zusammen, um etwas mit wie 'bigdf <- dplyr :: bind_rows (dflist, .id = "dfid") ', dann bei Bedarf in die Spalte' dfid' unterteilen. – Nick
Wenn die data.frames eine ähnliche Struktur haben, ist es eine gute Idee, sie in einer Liste zu belassen und von dort aus mit ihnen zu arbeiten.Sehen Sie [diesen Beitrag] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames) insbesondere, gregors Antwort darauf, warum dies eine gute Technik ist. – lmo
Vielen Dank Imo für mich auf diese Antwort von Gregor gerichtet. Sehr hilfreich. – VaguelySteamy