Tengo un vector de caracteres con nombre devuelto por xmlAttrs como este:
testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version",
"elapsed_time", "cpu_time"))
Me gustaría convertirlo en un marco de datos que se vea así:
testDF <- data.frame("db_version"="11.2.0.3.0","elapsed_time"=12.89,"cpu_time"=12.71)
head(testDF)
db_version elapsed_time cpu_time
1 11.2.0.3.0 12.89 12.71
r
dataframe
vector
type-conversion
Tyler Muth
fuente
fuente
data_frame(as.list(testVect))
devuelve un marco de datos de 5 filas.as_tibble(as.list(testVect))
oas_data_frame(as.list(testVect))
(as_data_frame
es un alias deas_tibble
).data.table(as.list(...))
no funciona, peroas.data.table(as.list(...))
sí.Las respuestas de @MatthewPlourde y @JackRyan funcionan, pero si tiene un vector con nombre largo, es molesto tener un marco de datos con una fila y muchas columnas. Si prefiere tener una columna de "clave" y una columna de "valor" con muchas filas, cualquiera de las siguientes debería funcionar:
data.frame(keyName=names(testVect), value=testVect, row.names=NULL) ## keyName value ## 1 db_version 11.2.0.3.0 ## 2 elapsed_time 12.89 ## 3 cpu_time 12.71 ## Suggested by @JWilliman tibble::enframe(testVect) ## # A tibble: 3 x 2 ## name value ## <chr> <chr> ## 1 db_version 11.2.0.3.0 ## 2 elapsed_time 12.89 ## 3 cpu_time 12.71 ## Suggested by @Joe stack(testVect) ## values ind ## 1 11.2.0.3.0 db_version ## 2 12.89 elapsed_time ## 3 12.71 cpu_time
fuente
tibble::enframe(testVect)
.stack(testVect)
también hace esto pero deja los valores como caracteres.testVect %>% as.list %>% as.data.frame %>% tidyr::gather()
Esto en realidad produce las columnas 'clave' y 'valor' a las que se refirió @dnlbrky.stack()
¡Qué función tan subestimada!Voy a intentarlo con esto:
fuente
data.frame(t(testVect))
Solía usar las funciones sugeridas en estas respuestas (
as.list
,as_tibble
,t
,enframe
, etc.), pero desde entonces han descubierto quedplyr::bind_rows
ahora trabaja para hacer exactamente lo que la pregunta original pregunta con una sola llamada de función.library(dplyr) testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", "elapsed_time", "cpu_time")) testVect %>% bind_rows #> # A tibble: 1 x 3 #> db_version elapsed_time cpu_time #> <chr> <chr> <chr> #> 1 11.2.0.3.0 12.89 12.71
Creado el 10/11/2019 con el paquete reprex (v0.3.0)
Como se muestra en tidyverse: forma preferida de convertir un vector con nombre en un data.frame / tibble
fuente
named vector %>% as_tibble(.,rownames="column name of row.names")
fuente