2012-02-27 25 views
10

tengo esta trama de datos anidadaaplanar una trama de datos

test <- structure(list(id = c(13, 27), seq = structure(list(
`1` = c("1997", "1997", "1997", "2007"), 
`2` = c("2007", "2007", "2007", "2007", "2007", "2007", "2007")), 
.Names = c("1", "2"))), .Names = c("penr", 
"seq"), row.names = c("1", "2"), class = "data.frame") 

Quiero una lista de todos los valores de la segunda columna, es decir

result <- c("1997", "1997", "1997", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007") 

¿Hay una manera fácil de lograr esto?

Respuesta

13

Esta línea hace el truco:

do.call("c", test[["seq"]]) 

o equivalente:

c(test[["seq"]], recursive = TRUE) 

o incluso:

unlist(test[["seq"]]) 

La salida de estas funciones es:

11  12  13  14  21  22  23  24  25  26  27 
"1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007" "2007" 

para deshacerse de los nombres por encima del vector de caracteres, llame as.character en el objeto resultante:

> as.character((unlist(test[["seq"]]))) 
[1] "1997" "1997" "1997" "2007" "2007" "2007" "2007" "2007" "2007" "2007" 
[11] "2007" 
+0

grande, gracias !!! – speendo

+0

¿Podría marcar la marca debajo de mi respuesta? De esa forma todos saben que esta pregunta ha sido respondida (y obtengo un representante :)) –

+0

+1 por mostrar tres buenas alternativas. – Andrie

4

Ésta no es una respuesta, pero un seguimiento/complemento a la respuesta de Pablo:

consistentemente en cualquier número de iteraciones que el método c realiza de la mejor manera. Sin embargo, a medida que aumentaba el número de iteraciones a 100000, la lista se desvió del método más pobre al muy cercano al c.

1000 iteraciones

 test replications elapsed relative user.self sys.self user.child sys.child 
2  c   1000 0.04 1.333333  0.03  0   NA  NA 
1 do.call   1000 0.03 1.000000  0.03  0   NA  NA 
3 unlist   1000 0.23 7.666667  0.04  0   NA  NA 

100.000 iteraciones

 test replications elapsed relative user.self sys.self user.child sys.child 
2  c  100000 8.39 1.000000  3.62  0   NA  NA 
1 do.call  100000 10.47 1.247914  4.04  0   NA  NA 
3 unlist  100000 9.97 1.188319  3.81  0   NA  NA 

De nuevo gracias por compartir Paul!

evaluación comparativa realiza utilizando rbenchmark en una máquina de Windows 7 arranca R 2.14.1

+0

¡Gracias por los datos de referencia! –

Cuestiones relacionadas