R 有像 python 这样的函数 startswith 或 endswith 吗?
Does R have function startswith or endswith like python?
> startsWith('abc', 'a')
[1] TRUE
> startsWith('abc', 'c')
[1] FALSE
> endsWith('abc', 'a')
[1] FALSE
> endsWith('abc', 'c')
[1] TRUE
不是那样内置的。
选项包括 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'
这个使用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
您使用子字符串将每个字符串剪切到所需的长度。长度是您要在每个字符串开头查找的字符数。
从 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
}
dplyr 包的 select
语句支持 starts_with
和 ends_with
。例如,这会选择以 Petal
开头的 iris 数据框的列
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
正如added to base
in 3.3.0、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
> startsWith('abc', 'a')
[1] TRUE
> startsWith('abc', 'c')
[1] FALSE
> endsWith('abc', 'a')
[1] FALSE
> endsWith('abc', 'c')
[1] TRUE
不是那样内置的。
选项包括 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'
这个使用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
您使用子字符串将每个字符串剪切到所需的长度。长度是您要在每个字符串开头查找的字符数。
从 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
}
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
正如added to base
in 3.3.0、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