2016-11-02 6 views
0

Я создал вектор с логическими значениями true и false, и я хочу использовать цикл for для идентификации всех значений с «TRUE».Для цикла с несколькими условиями в r, возвращающих одинаковые значения

«Master», «master» и «MSc» - все векторы 1:45, я хочу использовать несколько «или» условий для определения того, что для всех значений «ИСТИНА» будет создан новый вектор, значение «Мастер»:

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" 
    } 
} 

в то время как «Мастер», «Мастер» и «магистр» выглядит следующим образом:

> 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 

После выполнения этого цикла, я предполагаю, что я хотел бы получить несколько «Мастер» и «NA», но на самом деле все возвращаемые значения «Мастер» ?!

> 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" 

Я не могу найти что-то не так в цикле. Может ли кто-нибудь помочь? Большое спасибо!


редактировать Пол Hiemstra:

В следующем примере кода не воспроизводит проблему. Вы можете сделать вопрос воспроизводимым, либо путем воспроизведения проблемы, используя мой пример код или предоставления данных для кода выше:

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

Там нет абсолютно никаких причин, чтобы использовать цикл здесь. – Roland

+0

Поместите их в 'list' и используйте' Reduce' i.e. 'c (NA,« Master ») [Уменьшить ('|', список (Мастер, мастер, MSc)) + 1]'. Кроме того, если у вас есть логический вектор, нет необходимости в '==" TRUE "' – akrun

+0

Что такое значение 'fs $ data.linkedin_education_degree1', когда условие' Master [i] == "TRUE" || master [i] == "TRUE" || MSc [i] == "TRUE" 'не выполняется? – Hugo

ответ

1

На примере вы предоставили не воспроизвести неполадки вашей облицовки ...

во всяком случае, так как @Paul Hiemstra предложил в комментарии вы можете сделать это без петли, как это:

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