【问题标题】:ifelse returning NAs when condition is trueifelse 在条件为真时返回 NA
【发布时间】:2018-12-08 13:48:33
【问题描述】:

我在这里遗漏了一些基本的东西。我想从基于嵌套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  

为什么这两个条件没有被满足和提取?

我想我将继续使用 case_when 和 dplyr 作为替代方案,但我想了解ifelse 的问题(以及为什么case_when 可能与ifelse 不同

【问题讨论】:

    标签: r


    【解决方案1】:

    您的第一个条件(我认为这与第二个条件完全相同?)对于两个元素都是 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 月 8 日创建

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

    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 月 8 日创建

    【讨论】:

    • 谢谢。如果句子匹配但模式返回 NA,我想我需要 ifelse,但您的解决方案效果很好。谢谢
    猜你喜欢
    • 2021-11-19
    • 2019-06-11
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多