【发布时间】:2017-03-15 13:59:44
【问题描述】:
我创建了一些具有逻辑值 true 和 false 的向量,我想使用 for 循环来识别所有具有“TRUE”值的向量。
“Master”、“master”和“MSc”都是 1:45 向量,我想使用多个“或”条件来定义对于所有“TRUE”值,将创建一个新向量以获取该值“大师”:
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”、“master”和“MSc”看起来像:
> 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
运行这个循环后,我想我会得到一些“Master”和“NA”,但实际上所有的返回值都是“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"
我似乎找不到循环中有什么问题。有人可以提供一些帮助吗?非常感谢!
Paul 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
【问题讨论】:
-
这里绝对没有理由使用循环。
-
将它们放在
list中并使用Reduce即c(NA, "Master")[Reduce('|', list(Master, master, MSc)) + 1]。另外,如果你有一个逻辑向量,就不需要=="TRUE" -
不满足条件
Master[i]=="TRUE"||master[i]=="TRUE"||MSc[i]=="TRUE"时fs$data.linkedin_education_degree1的值是多少? -
请使您的示例可重现,使用我构建的一些示例数据我无法重现您的问题(我在您的问题中编辑了我的示例,您可以使用该数据重现问题吗?)。另外,这里不需要循环,向量化的方法会更好(更快,更短的代码),例如:
ifelse(m1 | m2 | m3, 'Master', NA). -
@Hugo 我想它会是'NA'?
标签: r for-loop multiple-conditions