Чувствительность к регистру в условном str_replace_all в r - PullRequest
0 голосов
/ 22 февраля 2019

Например, у меня есть этот код.

# Lookup List
fruits <- c("guava","avocado", "apricots","kiwifruit","banana")
vegies <- c("tomatoes", "asparagus", "peppers", "broccoli", "leafy greens")

# Patterns
foods <- c("guava", "banana", "broccoli")
patterns <- str_c(foods, collapse="|")

# Sample Sentence
sentence <- "I want to eat banana and broccoli!" 


typeOfFood <- function(foods) {

  if( foods %in% fruits ){
    type <- "FRUITS"
  }
  else if( foods %in% vegies ){
    type <- "VEGIES"
  }
  paste0(foods,"(",type,")")

}

str_replace_all(sentence, patterns, typeOfFood)

Вывод:

[1] "I want to eat banana(FRUITS) and broccoli(VEGIES)!"

Я хочу игнорировать чувствительность к регистру без использования tolower (предложение).

Пример предложения:

sentence <- "I want to eat BANANA and Broccoli!"

Пример вывода:

[1] "I want to eat BANANA(FRUITS) and Broccoli(VEGIES)!"

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете использовать вспомогательную функцию regex() из stringr, которая имеет опцию ignore_case.

Вам нужно будет изменить typeOfFood, чтобы игнорировать регистр.

typeOfFood <- function(foods) {
  if(tolower(foods) %in% fruits ){
    type <- "FRUITS"
  }
  else if(tolower(foods) %in% vegies ){
    type <- "VEGIES"
  }
  paste0(foods,"(",type,")")
}

sentence <- "I want to eat BANANA and Broccoli!"
str_replace_all(sentence, regex(patterns, ignore_case = TRUE), typeOfFood)
# [1] "I want to eat BANANA(FRUITS) and Broccoli(VEGIES)!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...