2015-07-17 13 views

ответ

37

Я не знаю точно, когда он был добавлен в 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

+2

Спасибо, ijoseph, пожалуйста, см. Комментарий alexis_laz в соответствии с принятым ответом. – Chen

+0

@Chen - Я думаю, что он по-прежнему принадлежит как ответ, так как это то, что вы изначально искали. Комментарии не заданы в камне. –

+0

@Chen ах, я полностью пропустил этот комментарий раньше. – ijoseph

17

Не встроенный подобным образом.

Варианты включают 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' 
+9

(только примечание) От R 3.3.0, функции ' startsWith' и 'endsWith' существуют. –

3

Это относительно просто с помощью функции подстроки:

> 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 

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

3

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

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 
} 
8

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

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

select поддерживают другие подкоманды тоже. Попробуйте ?select.

+0

это ответ логический –

3

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

library(data.table) 

"foo" %like% "^f" 

оценивает, как TRUE - Начиная с е

"foo" %like% "o$" 

вычисляется как TRUE - Ending с о

"bar" %like% "a" 

вычисляется как TRUE - Содержащие