2017-05-09 1 views
1

I ont une trame de données telles que:R - Variation des valeurs de rangée d'une colonne de valeurs de ligne provenant d'une autre colonne

X1 X2 
A Type1 
A Type2 
N Type1 
A Type3 
N Type2 
N Type2 

X1 et X2 sont des facteurs et pas de caractères.

Je voudrais avoir la trame de données suivantes:

X1 X2 
A Type1 
A Type2 
N NR 
A Type3 
N NR 
N NR 

Comme vous pouvez le voir, lorsque X1 est égal à « N », je veux X2 d'être égal à « NR ». J'ai essayé d'utiliser ifelse et d'autres fonctions, mais cela ne fonctionne pas et retourne "FALSE".

Voici un code que j'ai essayé:

df<-within(df, X2[X1=="N"] <- 'NR') 
+0

Très probablement, la question est que vous travaillez avec des variables de facteur plutôt que le caractère variables Vous pouvez vérifier ceci en utilisant 'str (df)' où df est le nom de vous data.frame. Pour lire les variables de caractères, utilisez 'as.is = TRUE' dans' read.csv' ou 'read.table'. Vous pouvez convertir en caractère en utilisant 'df $ X1 <- as.character (df $ X1)' par exemple. Avec les variables de caractère (en particulier avec X2 comme vecteur de caractère), 'df [df $ X1 ==" N "," X2 "] <-" NR "' accomplira ce que vous voulez. – lmo

Répondre

0

Nous pouvons utiliser data.table assigner en place

library(data.table) 
setDT(df1)[X1=="N", X2 := "NR"] 
+1

Merci! Ça marche. – MVachelard