visualizar mtcars functions espaƱol ejemplos data crear column r dataframe

mtcars - Lista nombrada a/de Data.Frame



r data frame mtcars (3)

Deseo hacer la observación, con suerte, no trivial, de la sugerencia de @Tyler Rinker

X <- split(df$x, df$name)

se puede hacer de manera más general con

X <- split(df, df$name)

La explicación de @Tyler Rinker''s split () coincide con el libro de cocina R.

http://my.safaribooksonline.com/book/programming/r/9780596809287/6dot1dot-splitting-a-vector-into-groups/id3392005

especificando que un vector puede ser agrupado, mientras que de hecho todo el marco de datos puede ser agrupado. Creo que agrupar el marco de datos, no el vector, sería la herramienta más valiosa (y de hecho lo que me trajo a esta publicación).

(df <- data.frame(name=c(rep("a",3),rep("b",3), rep("c",3)), x=c(1:3,4:6, 7:9))) (X <- split(df, df$name))

HTH.

Estoy buscando una manera rápida de ir y venir entre una lista del siguiente formato:

$`a` [1] 1 2 3 $`b` [1] 4 5 6

a / desde un data.frame del siguiente formato:

name x 1 a 1 2 a 2 3 a 3 4 b 4 5 b 5 6 b 6

(En realidad, no me importan los nombres de las columnas, en este caso).

Aquí está el marco de datos utilizado anteriormente en formato R:

df <- data.frame(name=c(rep("a",3),rep("b",3)), x=c(1:3,4:6))

De nuevo, estoy buscando dos operaciones separadas: una para convertir el data.frame anterior a una lista, y otra para convertirlo de nuevo a un data.frame.


Tal vez algo así como:

X <- split(df$x, df$name) data.frame(name = rep(names(X), sapply(X, length)), x=do.call(''c'', X))

EDITAR: decidí combinar la solución de Andrie y yo en una que parece ser exactamente lo que el OP pidió bastante simple. Dicho esto, no entiendo muy bien una situación en la que trataría los datos de esta manera en lugar de cómo lo hizo Andrie, ya que un marco de datos es una lista de vectores de igual longitud de todos modos.

# Your data set df <- data.frame(name=c(rep("a",3),rep("b",3)), x=c(1:3,4:6)) # converting it to list of vectors X <- split(df[, 2], df[, 1]) # converting it to a dataframe Y <- stack(X)[, 2:1]; names(Y) <- names(df) # Take Y and feed it back to these lines to show it # switches back and forth (X <- split(Y[, 2], Y[, 1])) Y <- stack(X)[, 2:1]; names(Y) <- names(df);Y


Utilice la stack y el unstack en la base R:

x <- data.frame(a=1:3, b=4:6) x a b 1 1 4 2 2 5 3 3 6

Use la stack de ancho a alto, es decir, apile los vectores uno encima del otro.

y <- stack(x) y values ind 1 1 a 2 2 a 3 3 a 4 4 b 5 5 b 6 6 b

Use unstack para hacer lo contrario.

unstack(y) a b 1 1 4 2 2 5 3 3 6

Si su estructura de datos es más complicada de lo que describió, stack y unstack ya no es adecuado. En ese caso, tendrás que usar reshape en base R o melt y dcast en el paquete reshape2 .