web-dev-qa-db-fra.com

Conversion de deux colonnes d'une trame de données en un vecteur nommé

J'ai besoin de convertir un deux colonnes à plusieurs lignes data.frame à un vecteur de caractères nommé. Ma data.frame serait quelque chose comme:

dd = data.frame(crit = c("a","b","c","d"), 
                name = c("Alpha", "Beta", "Caesar", "Doris")
                )

et ce dont j'ai réellement besoin serait:

whatiwant = c("a" = "Alpha",
              "b" = "Beta",
              "c" = "Caesar",
              "d" = "Doris")
47
Stefan F

Utilisez la fonction names:

whatyouwant <- as.character(dd$name)
names(whatyouwant) <- dd$crit

as.character est nécessaire, car data.frame et read.table transforme les caractères en facteurs avec les paramètres par défaut.

Si vous voulez une doublure:

whatyouwant <- setNames(as.character(dd$name), dd$crit)
58
Roland

Vous pouvez créer un vecteur à partir de dd$name Et ajouter des noms à l'aide de names(), mais vous pouvez tout faire en une seule étape avec structure():

whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit))
21
alexwhan

Pour plus de variété, essayez split et unlist:

unlist(split(as.character(dd$name), dd$crit))
#        a        b        c        d 
#  "Alpha"   "Beta" "Caesar"  "Doris" 
7

Vous pouvez également l'utiliser pour cela.

tibble::deframe()
3
John Waller