2015-07-17 15 views

Antwort

37

Ich bin nicht sicher genau, wenn es um base hinzugefügt wurde (zumindest von 3.3.0), aber startsWith (und endsWith) sind genau diese.

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

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

+2

Danke, Ijoseph, bitte siehe Alexis_laz Kommentar unter der angenommenen Antwort. – Chen

+0

@Chen - Ich denke, es gehört immer noch als Antwort, da es das ist, wonach Sie ursprünglich gesucht haben. Kommentare sind nicht in Stein gemeißelt. –

+0

@Chen ah, ich habe diesen Kommentar komplett verpasst. – ijoseph

17

Nicht so gebaut.

Zu den Optionen gehören grepl und 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

(nur eine Note) von R 3.3.0 Funktionen ' startsWith' und 'endsWith' existieren. –

3

Dies ist relativ einfach durch die Teilfunktion:

> 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 

Sie jede Zeichenfolge geschnitten auf die gewünschte Länge mit Teilkette. Die Länge ist die Anzahl der Zeichen, die Sie am Anfang jeder Zeichenfolge suchen.

3

einige Code aus dem dplyr Paket Borrowing [see this] Sie so etwas tun könnte:

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

Die select Erklärung des dplyr Paket unterstützt starts_with und ends_with. Beispielsweise wählen diese die Spalten des Irisdatenrahmens, der zu mit Petal

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

select unterstützt andere Subbefehle starten. Versuchen Sie ?select.

+0

es ist logisch logisch –

3

Die einfachste Art, wie ich denken kann, ist die %like% Operator zu verwenden:

library(data.table) 

"foo" %like% "^f" 

wertet als TRUE - Beginnend mit f

"foo" %like% "o$" 

wertet als TRUE - Ende mit o

"bar" %like% "a" 

wertet als TRUE - mit ein