web-dev-qa-db-fra.com

Convertir un vecteur de personnage nommé en data.frame

J'ai un vecteur de caractère nommé renvoyé de 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
69
Tyler Muth

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).

66
Matthew Plourde

Les réponses de @MatthewPlourde et de @JackRyan fonctionnent, mais si vous avez un long vecteur nommé, il est gênant de disposer d'un bloc de données avec une ligne et plusieurs colonnes. Si vous préférez une colonne "clé" et une colonne "valeur" comportant de nombreuses 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
48
dnlbrky

Je vais essayer de répondre à ceci:

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