Имеет ли R функцию startswith или endswith, как python? [закрытый]

искал предикторы, имя которых начинается с некоторой подстроки, не смог найти подобной функции.

6 ответов


As добавил base в 3.3.0, startsWithendsWith) именно этот.

> startsWith("what", "wha")
[1] TRUE
> startsWith("what", "ha")
[1] FALSE

https://stat.ethz.ch/R-manual/R-devel/library/base/html/startsWith.html


не встроенный такого.

варианты grepl и substr.

x <- 'ABCDE'
grepl('^AB', x) # starts with AB?
grepl('DE$', x) # ends with DE?
substr(x, 1, 2) == 'AB'
substr('ABCDE', nchar(x)-1, nchar(x)) == 'DE'

пакет dplyr select заявление поддерживает starts_with и ends_with. Например, это выбирает столбцы фрейма данных iris, которые начинаются с Petal

library(dplyr)
select(iris, starts_with("Petal"))

select поддерживает и другие подкоманды. Попробуй!--6--> .


самый простой способ, который я могу придумать, это использовать %like% оператор:

library(data.table)

"foo" %like% "^f" 

оценивается как TRUE начиная с f

"foo" %like% "o$" 

оценивается как TRUE заканчивая o

"bar" %like% "a"

оценивается как TRUE содержащих a


заимствование кода из dplyr пакета [смотри в этом] вы могли бы сделать что-то вроде этого:

starts_with <- function(vars, match, ignore.case = TRUE) {
  if (ignore.case) match <- tolower(match)
  n <- nchar(match)

  if (ignore.case) vars <- tolower(vars)
  substr(vars, 1, n) == match
}

ends_with <- function(vars, match, ignore.case = TRUE) {
  if (ignore.case) match <- tolower(match)
  n <- nchar(match)

  if (ignore.case) vars <- tolower(vars)
  length <- nchar(vars)

  substr(vars, pmax(1, length - n + 1), length) == match
}

Это относительно просто, используя функцию substring:

> strings = c("abc", "bcd", "def", "ghi", "xyzzd", "a")
> str_to_find = "de"
> substring(strings, 1, nchar(str_to_find)) == str_to_find
[1] FALSE FALSE  TRUE FALSE FALSE FALSE

вы вырезаете каждую строку до нужной длины с подстрокой. Длина-количество символов, которые вы ищете в начале каждой строки.