通配符匹配R中的字符串
Wildcard to match string in R
这听起来可能很傻,但让我抓狂。
我有一个包含字母数字值的矩阵,我正在努力测试该矩阵的某些元素是否仅匹配首字母和末尾字母。因为我不关心中间字符,所以我尝试(没有成功)使用通配符。
例如,考虑这个矩阵:
m <- matrix(nrow=3,ncol=3)
m[1,]=c("NCF","NBB","FGF")
m[2,]=c("MCF","N2B","CCD")
m[3,]=c("A3B","N4F","MCP")
我想评估 m[2,2] 是否以“N”开头并以“B”结尾,而不考虑字符串中的第 2 个字母。我尝试过
grep("N.B",m)
它有效,但我仍然想知道是否有更紧凑的方法,例如:
m[2,2]="N.B"
这显然不起作用!
谢谢
您可以将 grepl
与子集 m
一起使用,例如:
grepl("^N.B$", m[2,2])
#[1] TRUE
或使用startsWith
和endsWith
:
startsWith(m[2,2], "N") & endsWith(m[2,2], "B")
#[1] TRUE
这听起来可能很傻,但让我抓狂。 我有一个包含字母数字值的矩阵,我正在努力测试该矩阵的某些元素是否仅匹配首字母和末尾字母。因为我不关心中间字符,所以我尝试(没有成功)使用通配符。
例如,考虑这个矩阵:
m <- matrix(nrow=3,ncol=3)
m[1,]=c("NCF","NBB","FGF")
m[2,]=c("MCF","N2B","CCD")
m[3,]=c("A3B","N4F","MCP")
我想评估 m[2,2] 是否以“N”开头并以“B”结尾,而不考虑字符串中的第 2 个字母。我尝试过
grep("N.B",m)
它有效,但我仍然想知道是否有更紧凑的方法,例如:
m[2,2]="N.B"
这显然不起作用!
谢谢
您可以将 grepl
与子集 m
一起使用,例如:
grepl("^N.B$", m[2,2])
#[1] TRUE
或使用startsWith
和endsWith
:
startsWith(m[2,2], "N") & endsWith(m[2,2], "B")
#[1] TRUE