ifelse возвращает NA, когда условие выполняется - PullRequest
0 голосов
/ 08 декабря 2018

Мне здесь не хватает чего-то фундаментального.Я хочу извлечь стриги из фрейма данных на основе вложенного 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

1 Ответ

0 голосов
/ 08 декабря 2018

Ваше первое условие (которое, на мой взгляд, странно идентично второму?) - 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

Создано в 2018-12-08 с помощью пакета Представить (v0.2.1)

Конечно, вместо этого можно задать вектор для аргумента шаблона 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"

Создано в 2018-12-08 пакетом prex (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...