2016-11-02 6 views
0

J'ai créé un vecteur avec des valeurs logiques vrai et faux, et je veux utiliser une boucle for pour identifier tous ceux avec la valeur "TRUE". "Master", "master" et "MSc" sont tous 1:45 vecteurs, je veux utiliser plusieurs "ou" des conditions pour définir que pour toutes les valeurs "VRAI", un nouveau vecteur sera créé en prenant le "0". valeur de "master":Pour boucle avec plusieurs conditions dans r retournant les mêmes valeurs

n <- nrow(fs) 
for (i in 1:n) { 
    if(Master[i]=="TRUE"||master[i]=="TRUE"||MSc[i]=="TRUE"){ 
    fs$data.linkedin_education_degree1[i] <- "Master" 
    } 
} 

Alors que "maître", "maître" et "MSC" ressemblent:

> Master 
[1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE 
[24] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE 
> master 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[24] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE 
> MSc 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[24] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 

Après avoir exécuté cette boucle, je suppose que je recevrais quelques "maître" et "NA", mais en réalité toutes les valeurs retournées sont "Master" ?!

> fs$data.linkedin_education_degree1 
[1] "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" 
[16] "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" 
[31] "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" "Master" 

Je n'arrive pas à trouver ce qui ne va pas dans la boucle. Quelqu'un peut-il offrir de l'aide? Merci beaucoup!


modifier par Paul Hiemstra:

Le code exemple suivant ne reproduit pas votre problème. Pouvez-vous la question reproductible, soit en reproduisant le problème en utilisant mon code exemple ou en fournissant les données de votre code ci-dessus:

m1 = c(TRUE, TRUE, FALSE) 
m2 = c(TRUE, FALSE, FALSE) 
m3 = c(TRUE, TRUE, FALSE) 
result = rep(NA, 3) 

n <- length(m1) 
for (i in 1:n) { 
    if (m1[i] == 'TRUE' || m2[i] == 'TRUE') { 
    result[i] = 'Master' 
    } 
} 
# > result 
# [1] "Master" "Master" NA 
+3

il n'y a absolument aucune raison d'utiliser une boucle ici. – Roland

+0

Placez-les dans une 'liste' et utilisez' Reduce', c'est-à-dire 'c (NA," Master ") [Reduce ('|', liste (Master, master, MSc)) + 1]'. De plus, si vous avez un vecteur logique, vous n'avez pas besoin de '==" TRUE "' – akrun

+0

Quelle est la valeur de 'fs $ data.linkedin_education_degree1' quand la condition' Master [i] == "TRUE" || master [i] == "VRAI" || MSc [i] == "VRAI" 'n'est pas atteint? – Hugo

Répondre

1

L'exemple fourni ne reproduit pas le problème de votre face ...

Quoi qu'il en soit, comme suggéré dans Hiemstra @ Paul le commentaire que vous pouvez le faire sans une boucle, comme ceci:

fs$data.linkedin_education_degree1 <- ifelse(Master | master | Msc, 'Master', NA)