2015-07-17 15 views

Odpowiedz

37

Nie jestem pewien, kiedy dokładnie został dodany do base (przynajmniej 3.3.0), ale startsWith (i endsWith) są dokładnie tego.

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

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

+2

Dzięki, ijoseph, zobacz komentarz alexis_laz pod zaakceptowaną odpowiedzią. – Chen

+0

@ Chęć - myślę, że nadal należy jako odpowiedź, ponieważ tego właśnie szukałeś. Komentarze nie są ustawione w kamieniu. –

+0

@ Chan ah, całkowicie przegapiłem ten komentarz. – ijoseph

17

Nie wbudowane w ten sposób. Dostępne są następujące opcje: grepl i 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

(tylko uwaga) Od R 3.3.0, funkcje ' startsWith' i 'endsWith' istnieją. –

3

Jest to stosunkowo proste przy użyciu funkcji podciąg:

> 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 

wyciąć każdy łańcuch do odpowiedniej długości z podciągu. Długość to liczba znaków, których szukasz na początku każdego ciągu.

3

Pożyczanie trochę kodu z opakowania dplyr[see this] mógłby zrobić coś takiego:

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

na dplyr pakiet za select oświadczenie obsługuje starts_with i ends_with. Na przykład, ten wybiera kolumny ramki danych tęczówki, które zaczynają się Petal

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

select wspiera innych podpoleceń też. Wypróbuj ?select.

+0

to zwrot logiczny –

3

Najprościej można myśleć jest użycie operatora %like%:

library(data.table) 

"foo" %like% "^f" 

daje wartość TRUE - od F

"foo" %like% "o$" 

ocenia jako TRUE - kończąc O

"bar" %like% "a" 

ocenia jako TRUE - Zawierające

Powiązane problemy