我在这里缺少一些基本知识。我想从基于嵌套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}}
答案 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创建