質問はタイトルで非常に明確です。
.3.0でbase
に追加 のように、startsWith
(およびendsWith
)はまさにこれです。
> 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
をサポートしています。たとえば、これはPetal
で始まる虹彩データフレームの列を選択します
library(dplyr)
select(iris, starts_with("Petal"))
select
は他のサブコマンドもサポートします。 ?select
を試してください。
私が考えることができる最も簡単な方法は、%like%
演算子を使用することです:
library(data.table)
"foo" %like% "^f"
TRUE
として評価-fで始まる
"foo" %like% "o$"
TRUE
として評価されます-oで終わる
"bar" %like% "a"
TRUE
として評価-含むa
これは、サブストリング関数を使用することで比較的簡単です。
> 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
各文字列を部分文字列で目的の長さに切り取ります。長さは、各文字列の先頭で探している文字数です。
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
}