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: 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? P> 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. P> p>
3 Réponses :
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
Ou utilisez l'approche code> facteur code> IE as.Character (avec (df, facteur (Val, niveaux = unique (Val), étiquettes = trans [-Length (Trans)]))) Code>
Il pourrait être plus intuitif de créer Trans comme C ("0" = "zzt", "1" = "zzu", "2" = "zzv", "3" = "zzw") code> Ce qui arrive au travail car l'OP veut garder
na code> comme
na code>.
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))]
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))