105 votes

Convertir un vecteur de caractères nommés en data.frame

J'ai un vecteur de caractères nommés renvoyé par xmlAttrs comme ceci :

testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", 
             "elapsed_time", "cpu_time"))

Je voudrais le convertir en un cadre de données qui ressemble à ceci :

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

94voto

Matthew Plourde Points 18649

C'est aussi simple que data.frame(as.list(testVect)) . Ou si vous voulez des types de données sensibles pour vos colonnes, data.frame(lapply(testVect, type.convert), stringsAsFactors=FALSE) .

71voto

dnlbrky Points 891

Les réponses de @MatthewPlourde et @JackRyan fonctionnent, mais si vous avez un long vecteur nommé, il est ennuyeux d'avoir un cadre de données avec une ligne et plusieurs colonnes. Si vous préférez avoir une colonne "clé" et une colonne "valeur" avec plusieurs lignes, l'une des solutions suivantes devrait fonctionner :

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

20voto

Jack Ryan Points 862

Je vais tenter le coup :

test.vector <- as.data.frame(t(testVect))
class(test.vector)

6voto

Arthur Yip Points 931

J'avais l'habitude d'utiliser les fonctions proposées dans ces réponses ( as.list , as_tibble , t , enframe ) mais ont découvert depuis que dplyr::bind_rows permet maintenant de faire exactement ce que la question originale demande avec un seul appel de fonction.

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

Créé le 2019-11-10 par le paquet reprex (v0.3.0)

Comme indiqué dans tidyverse - méthode préférée pour transformer un vecteur nommé en un data.frame/tibble

3voto

BatmanFan Points 43
named vector %>% as_tibble(.,rownames="column name of row.names")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X