【问题标题】:For loop with multiple conditions in r returning same values [closed]r中具有多个条件的for循环返回相同的值[关闭]
【发布时间】: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 中并使用Reducec(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


【解决方案1】:

您提供的示例没有重现您面临的问题...

无论如何,正如@Paul Hiemstra 在评论中建议的那样,您可以在没有循环的情况下执行此操作,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2013-09-19
    • 2023-01-29
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多