条件为真时ifelse返回NA

时间:2018-12-08 13:48:33

标签: r

我在这里缺少一些基本知识。我想从基于嵌套ifelse

的数据帧中提取细纹

输入

library(stringr)
vec1<-c("1cm start shaped area Barr.","small tongue of columnar lines mucosa in the.")

vec1<-data.frame(vec1,stringsAsFactors = FALSE)

尝试

ifelse(grepl("Barr|column",vec1$vec1),str_extract(vec1$vec1,"\\d\\s*cm.*Barr|column\\?//."),
           ifelse(grepl("Barr|column",vec1$vec1),str_extract(vec1$vec1,"tongue.*col"),"No"))

所需的输出

"1cm start shaped area Barr"
"tongue of col"

实际输出

[1] "1cm start shaped area Barr" NA  

为什么不能同时满足和提取这两个条件?

我猜想将dplyr用作case_when的替代方法,但我想了解ifelse的问题(以及为什么case_when可能与{ {1}}

1 个答案:

答案 0 :(得分:2)

这两个元素的第一个条件(与我认为的第二个条件古怪地相同?)是TRUE,但是第二个元素的第一个模式的提取是NA

library(stringr)
vec1 <- c("1cm start shaped area Barr.","small tongue of columnar lines mucosa in the.")

vec1 <- data.frame(vec1,stringsAsFactors = FALSE)

grepl("Barr|column", vec1$vec1)
#> [1] TRUE TRUE
str_extract(vec1$vec1, "\\d\\s*cm.*Barr|column\\?//.")
#> [1] "1cm start shaped area Barr" NA

reprex package(v0.2.1)于2018-12-08创建

如果您的两个str_extract()条件确实假定是相同的,那么您当然可以给ifelse()的模式参数提供向量:

library(stringr)
vec1 <- c("1cm start shaped area Barr.","small tongue of columnar lines mucosa in the.")

vec1 <- data.frame(vec1,stringsAsFactors = FALSE)

grepl("Barr|column", vec1$vec1)
#> [1] TRUE TRUE
str_extract(vec1$vec1, "\\d\\s*cm.*Barr|column\\?//.")
#> [1] "1cm start shaped area Barr" NA
ifelse(grepl("Barr|column", vec1$vec1),
       str_extract(vec1$vec1, c("\\d\\s*cm.*Barr|column\\?//.", "tongue.*col")),
       "No")
#> [1] "1cm start shaped area Barr" "tongue of col"

reprex package(v0.2.1)于2018-12-08创建