Bei dem Versuch, a question früher zu beantworten, stieß ich auf ein Problem, das schien wie es sollte einfach sein, aber ich konnte nicht herausfinden.Verwenden Sie Objektnamen in einer Liste in lapply/ldply
Wenn ich eine Liste von Datenrahmen haben:
df1 <- data.frame(a=1:3, x=rnorm(3))
df2 <- data.frame(a=1:3, x=rnorm(3))
df3 <- data.frame(a=1:3, x=rnorm(3))
df.list <- list(df1, df2, df3)
Dass ich zusammen rbind
wollen, kann ich folgendes tun:
df.all <- ldply(df.list, rbind)
Allerdings möchte ich eine weitere Spalte, die jede der data.frame
identifiziert Reihe kam von. Ich erwartete, in der Lage zu sein, die deparse(substitute(x))
Methode (here und anderswo) zu verwenden, um den Namen des relevanten data.frame
zu erhalten und eine Spalte hinzuzufügen. Dies ist, wie ich es angesprochen:
fun <- function(x) {
name <- deparse(substitute(x))
x$id <- name
return(x)
}
df.all <- ldply(df.list, fun)
Welche kehrt
a x id
1 1 1.1138062 X[[1L]]
2 2 -0.5742069 X[[1L]]
3 3 0.7546323 X[[1L]]
4 1 1.8358605 X[[2L]]
5 2 0.9107199 X[[2L]]
6 3 0.8313439 X[[2L]]
7 1 0.5827148 X[[3L]]
8 2 -0.9896495 X[[3L]]
9 3 -0.9451503 X[[3L]]
So offensichtlich jedes Element der Liste enthält nicht den Namen, den ich denke, es tut. Kann jemand einen Weg vorschlagen, um das zu bekommen, was ich erwartet habe (siehe unten)? nur
a x id
1 1 1.1138062 df1
2 2 -0.5742069 df1
3 3 0.7546323 df1
4 1 1.8358605 df2
5 2 0.9107199 df2
6 3 0.8313439 df2
7 1 0.5827148 df3
8 2 -0.9896495 df3
9 3 -0.9451503 df3
Nicht gerade eine Antwort, aber Sie könnten [hier] in den verschiedenen Methoden interessiert sein (http://stackoverflow.com/q/15162197/324364). – joran
Schießen Sie sich in den Fuß, indem Sie keine benannte Liste verwenden. –