2017-01-25 4 views
0

J'ai une base de données dans R dans laquelle toutes les cellules contiennent '0' ou un mot (chaîne courte de 4-6 lettres). Je voudrais remplacer toutes ces valeurs de chaîne à '1'. Je vois beaucoup d'options remplaçant des mots ou des caractères spécifiques, mais comme j'ai beaucoup de mots différents, je voudrais simplement dire quelque chose comme 'remplacer toutes les valeurs de chaîne par des nombres' 1 ').Remplacer toutes les valeurs de chaîne par '1'

Merci beaucoup pour votre aide!

+4

http://stackoverflow.com/help/how-to-ask –

Répondre

3
x <- c("0","a","short","sentence") 

as.numeric(x != "0") 
[1] 0 1 1 1 

Pour travailler avec un data.frame, vous devez boucle sur les colonnes à l'aide lapply et reconvertir:

y <- data.frame(x,x,x) 
data.frame(lapply(y, function(x) as.numeric(x!="0"))) 
    x x.1 x.2 
1 0 0 0 
2 1 1 1 
3 1 1 1 
4 1 1 1 
+4

mieux (imo): 'as.numeric (! X = "0")' – Jaap

+0

vous aussi besoin d'incorporer un exemple avec data.frame @James –

1

en supposant df est vos données. en supposant que vos chaînes ont été toutes les variables character

df = data.frame(a = c("joel", "0", "wilso"), b = c(1:3)) 
df$a <- as.character(df$a) 
df[df != '0']='1' 
df 
# a b 
#1 1 1 
#2 0 1 
#3 1 1 

df = data.frame(a = c("j", "0", "w"), b = c(1:3), 
       c = 4:6, d = c("eng", "0", "aus")) 

data.frame(lapply(df, function(x) { 
         if(is.factor(x)) { 
          x <- as.character(x) 
         } 
         x[x!="0"]="1" 
         x})) 
# a b c d 
#1 1 1 1 1 
#2 0 1 1 0 
#3 1 1 1 1 
1

Nous pouvons utiliser

replace(x, x!="0", 1) 

Ou

as.integer(x!= "0") 

Si nous avons un data.frame

df1[] <- lapply(df1, function(x) as.integer(x!="0"))