102 votes

Convertir deux colonnes d'un data frame en un vecteur nommé

J'ai besoin de convertir un data.frame à deux colonnes et plusieurs lignes en un vecteur de caractères nommé. Mon data.frame ressemblerait à ceci :

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

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

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

99voto

Roland Points 37641

Utilisez la fonction names:

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

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

Si vous voulez une seule ligne :

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

79voto

John Waller Points 1586

Vous pouvez également utiliser deframe(x) du package tibble pour cela.

tibble::deframe()

Cela convertit la première colonne en noms et la deuxième colonne en valeurs.

34voto

user5783745 Points 1214

Voici une façon très générale, facile et propre :

library(dplyr)

iris %>%
  pull(Sepal.Length, Species)

Le premier argument est les valeurs, le deuxième argument est les noms.

27voto

alexwhan Points 5632

Vous pouvez créer un vecteur à partir de dd$name, et ajouter des noms en utilisant names(), mais vous pouvez le faire en une seule étape avec structure():

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

8voto

Ananda Mahto Points 67213

Pour varier, essayez split et unlist:

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

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