【问题标题】:Nested ifelse statement with strings带有字符串的嵌套 ifelse 语句
【发布时间】:2019-07-13 08:10:33
【问题描述】:

我在调试我的嵌套 ifelse 语句时遇到了一些问题。

它运行第一部分很好,然后不会运行第二个ifelse 语句。我试过颠倒陈述的顺序。我有几个类似的功能。我不明白为什么下半场没有按预期运行。

如果数学、读、写都是读“通过”,那么结果向量中的元素应该是“通过”,如果有一个“是”豁免列,那么结果向量中的元素应该是“豁免”其他所有内容都应为“未通过”。

Math <-c("Pass", "Not Pass", "Not Pass", "NA", "NA", "NA")
Read<-c("Pass","Pass","Not Pass", "NA", "NA", "NA") 
Write<-c("Pass","Pass", "Not Pass", "NA", "NA", "NA") 
Exempt<-c( "NA", "NA", "NA","yes","yes","yes") 
dat<-cbind(Math,Read,Write,Exempt)


dat$Result <- 
    ifelse(dat$math=="Pass" & dat$Read=="Pass" & dat$writing == "Pass",
           "Pass",
           ifelse(dat$Exempt == "yes", "Exempt", "Not Pass"))

【问题讨论】:

  • 嗨,如果你不provide any data,我们对你的代码无能为力。
  • 您的示例中仍然缺少 dat$MathPraxis_Dat
  • 注意:您发布的示例数据不是数据框,而是字符矩阵。清除并修复区分大小写和列的拼写后,就没有问题了:rextester.com/WQJRU6005

标签: r if-statement nested


【解决方案1】:

嵌套的ifelse 没问题:

set.seed(2)
df <- data.frame(a = rnorm(10), b = rnorm(10))
df$c <- ifelse(df$a > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(df)
#             a           b  c
#1  -0.89691455  0.41765075 b+
#2   0.18484918  0.98175278 a+
#3   1.58784533 -0.39269536 a+
#4  -1.13037567 -1.03966898 b-
#5  -0.08025176  1.78222896 b+
#6   0.13242028 -2.31106908 a+

但是,您的Praxis_Dat[, 22:24] == "Pass" 可能是问题所在。目前尚不清楚这意味着什么?至少在您不提供任何数据时不会。

此处的类似代码按的预期工作,但在这种情况下您的预期输出是什么?

res <- ifelse(df[,1:2] > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(res)
#      a    b   
# [1,] "b+" "a+"
# [2,] "a+" "a+"
# [3,] "a+" "b-"
# [4,] "b-" "b-"
# [5,] "b+" "a+"
# [6,] "a+" "b-"

当然,当你将此矩阵输出分配给一列时需要小心:

df$d <- ifelse(df[,1:2] > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(df)
#            a          b  c d.a d.b
#1 -0.89691455  0.4176508 b+  b+  a+
#2  0.18484918  0.9817528 a+  a+  a+
#3  1.58784533 -0.3926954 a+  a+  b-
#4 -1.13037567 -1.0396690 b-  b-  b-
#5 -0.08025176  1.7822290 b+  b+  a+
#6  0.13242028 -2.3110691 a+  a+  b-

【讨论】:

  • 我认为您需要提供一个最小的可重现示例来显示(部分)您的数据、输出和预期/想要的输出。否则,真的很难帮你。或者,在我看来,我的答案中的数据示例在功能上与您的代码相同——因此您可以尝试解释我在这里得到的输出有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
相关资源
最近更新 更多