如何解决嵌套ifelse函数中的AND运算符
我不是R的高级用户,但通常我迟早会找到所需的帮助。 好吧,这次不是。 我有一个名为“ df”的数据框,我试图创建一个额外的列“ Sel”,用于在其中存储基于其他列信息的信息。 为此,我使用了一个嵌套的ifelse函数,下面是我使用的代码,它适用于前两个条件,但不适用于使用AND运算符的后两个条件。 在将用法与其他示例进行比较时,我没有看到任何区别,并且也没有错误,仅粘贴/打印了与该条件相关的语句。 (我也尝试过&&)。 我究竟做错了什么?预先感谢您的帮助!
df <- data.frame(
Gene = c("A","B","C","D","E"),P_a = c(NA,NA,21010,14941,12),E_a = c(NA,"miss_b",NA),P_b = c(1,200,32,21),E_b = c(NA,"miss_a","miss_a"),Eq = c("no","yes",NA )
)
df$Sel <- ifelse(
(df$Eq == "no"),"same",ifelse((df$Eq == "yes"),"diff",ifelse (df$E_a == "miss_b" &
df$E_b == "miss_a","G_P",ifelse(is.na(df$P_b & df$E_b &
df$Eq),"in","out"
))))
df_result <- data.frame(
Gene = c("A",NA ),Sel = c("same","out")
)
解决方法
这是您修改的代码。
df$Sel <- ifelse(
(df$Eq %in% "no"),"same",ifelse((df$Eq %in% "yes"),"diff",ifelse (df$E_a %in% "miss_b" &
df$E_b %in% "miss_a","G_P",ifelse(is.na(df$P_b) & is.na(df$E_b) &
is.na(df$Eq),"in","out"
))))
df$Sel
[1] "same" "diff" "G_P" "in" "out"
第一个问题是使用==
。只要您的数据中没有NA,==
就可以正常工作。但是,如果将NA
与==
一起使用,您将得到一个NA-结果不是所需的FALSE或TRUE。并且ifelse
需要逻辑(FALSE,TRUE
)的其他方式,否则您只会得到NA。就像您提到的那样,这发生在您的第三行。
您可以以ifelse(3 == NA,1,2)
为例进行尝试。您可能期望2作为输出,因为2不是NA。但是您会得到NA作为输出。
使用==
代替%in%
。
第二个问题在is.na(df$P_b & df$E_b & df$Eq)
中。您一次只能在is.na()
中放入一个变量。因此,每个变量都需要一个自己的is.na
函数-ifelse(is.na(df$P_b) & is.na(df$E_b) & is.na(df$Eq),"out")
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。