2010-09-24 4 views
4

Cette question est similaire à la précédente. Je fournis cet exemple de données pour faire passer ma question.si les valeurs de deux colonnes sont égales, changez la valeur de la colonne résultante en NA et sinon gardez la valeur originale de la colonne résultante - en utilisant R

id=c(1,2,3,4,5,6,7,8,9,10) 
var1=c(0,1,2,0,6,9,0,0,3,0) 
var2=c(0,0,2,3,0,0,0,5,0,0) 
var3=c(0,1,4,3,6,9,0,5,3,0) 
data=data.frame(id,var1,var2, var3) 

Ce que je besoin est: si les valeurs de var1==var2, puis faire var3==NA mais si elles ne sont pas alors garder la valeur de var3. Serait heureux de le faire en utilisant la fonction ifelse en R, mais d'autres options sont les bienvenues.

J'espère que la question est assez claire.

Cordialement, Bazon

Répondre

1

Une chose à prendre en compte avec ifelse est de savoir si la condition pourrait être NA. Dans votre cas, en utilisant l'exemple de code de David, si var1 ou var2 est NA, alors var3 sera mis à NA.

I soit ensemble à F NAs dans la condition, ou faire quelque chose comme:

var3 <- replace(var3, which(var1 == var2), NA) 

Comparez:

data$var1[1] = NA 
with(data, ifelse(var1 == var2, NA, var3)) 
# [1] NA 1 NA 3 6 9 NA 5 3 NA 
with(data, replace(var3, which(var1 == var2), NA)) 
# [1] 0 1 NA 3 6 9 NA 5 3 NA 
+0

Bonjour Charles, vous avez tout à fait raison. J'ai fait une vérification rapide après avoir appliqué le code de David et il a fait ce que vous avez dit (si var1 ou var2 est NA, alors var3 sera réglé sur NA), ce qui n'était pas ce que je voulais dans ce cas. Je n'étais tout simplement pas clair dans ce domaine ... mes excuses à vous David et merci (Charles) pour l'aide précieuse! – baz

1

Cela devrait fonctionner aussi longtemps qu'il n'y aura pas de NA est dans les deux vecteurs:

var3 <- ifelse(var1 == var2, NA, var3) 
+0

merci david ... ça a marché! – baz

+0

c'était la ligne complète que j'ai utilisée: df $ var3 <- ifelse (df $ var1 == df $ var2, "NA", df $ var3) – baz

Questions connexes