10
votes

Changer un entier en une chaîne spécifique dans une donnée.

J'ai une trame de données avec deux colonnes. La deuxième colonne ne contient que des entiers. Plus précisément, il contient 0,1,2,3 et certains NA. Quelque chose comme ceci: xxx

Ce que je recherche est une commande qui change 0 dans zzt le 1 dans zzu et ainsi de suite. Les NA devraient rester en tant que na. Comment cela pourrait-il fonctionner?

J'ai essayé une boucle en combinaison avec certaines déclarations si elles ne fonctionnent pas. Je sais que de telles changances pensent sont assez faciles dans R, mais il semble que j'ai un bloc dans mon cerveau.


0 commentaires

3 Réponses :


14
votes

Ceci le fera:

  # Setup an example data frame
  df <- data.frame(id=c("id1","id2","id3","id4","id5","id6","id7","id8"),
                 val=c(0,1,0,2,3,1,2,NA))

  # Now setup the translation vector - essentially a lookup table
  trans <- c("ZZT","ZZU","ZZV","ZZW",NA)
  names(trans) <- c(0,1,2,3,NA)

  # Now translate the values into a new column and print it out 
  df$nval <- trans[ as.character(df$val) ]
  df$nval
  # [1] "ZZT" "ZZU" "ZZT" "ZZV" "ZZW" "ZZU" "ZZV" NA 


2 commentaires

Ou utilisez l'approche facteur IE as.Character (avec (df, facteur (Val, niveaux = unique (Val), étiquettes = trans [-Length (Trans)])))


Il pourrait être plus intuitif de créer Trans comme C ("0" = "zzt", "1" = "zzu", "2" = "zzv", "3" = "zzw") Ce qui arrive au travail car l'OP veut garder na comme na .



6
votes

Utilisation de code> correspondant code> pour créer un vecteur d'index dans le vecteur de valeurs de remplacement est une approche "canonique" (l'exemple de Mike Wise's's Exemple)

df$val <- c("ZZT","ZZU","ZZV","ZZW",NA)[ match( df$val, c(0,1,2,3,NA))]


0 commentaires

6
votes

Vous pouvez mapper des valeurs à l'aide de la fonction code> mapvalues ​​ code> du package Plyr. Utilisation des exemples de données de Mike Wise's Réponse:

library(plyr)
df$val2 <- mapvalues(df$val,
                           from = c(0,1,2,3,NA),
                           to = c("ZZT", "ZZU", "ZZV", "ZZW", NA))


0 commentaires