#r #string #startswith
Вопрос:
Я работал с этой startsWith
функцией. Мне было интересно, как я мог заставить его возвращать фактическое имя строки вместо логического значения. Я открыт для использования и других функций.
startsWith(c("sad_game", "angry_mad", "happy_name"), "happy")
[1] FALSE FALSE TRUE
Спасибо!
Ответ №1:
Вместо startsWith
этого используйте grep
для возврата значения на лету , ^
чтобы указать начало строки (РЕДАКТИРОВАНИЕ на основе комментариев @Ben Bolker)
grep("^happy", c("sad_game", "angry_mad", "happy_name"), value = TRUE)
[1] "happy_name"
startsWith
возвращает логический вектор. Нам нужно взять логический вектор в качестве индекса для подмножества исходного вектора
c("sad_game", "angry_mad", "happy_name")[startsWith(c("sad_game",
"angry_mad", "happy_name"), "happy")]
Обратите внимание, что в приведенном выше примере мы должны ввести исходный вектор два раза. Лучшим вариантом было бы создать объект и повторно использовать его
v1 <- c("sad_game", "angry_mad", "happy_name")
v1[starts_with(v1, "happy")]
Комментарии:
1. Классно! Спасибо вам за ваш полезный ответ. Я действительно ценю вашу помощь!
Ответ №2:
Другим вариантом было бы использовать str_subset
stringr
x <- c("sad_game", "angry_mad", "happy_name")
stringr::str_subset(x, '^happy')
#[1] "happy_name"
который основан на stringi::stri_subset_regex
stringi::stri_subset_regex(x, '^happy')