部分字符串精确匹配
Partial string exact matching
我进行了很多搜索,但未能找到解决方案...我认为对于你们中的许多人来说这很容易...但对我而言并非如此。
df <- data.frame(site = c("11", " 4 , 111", "3,1 ", "4,11111 "))
> df
site
1 11
2 4 , 111
3 3,1
4 4,11111
我有一列,其中多个站点代码可能用逗号分隔(不是可能出现的随机空格)。我正在尝试查找与感兴趣的字符串站点编号匹配的行。
搜索站点为 11 或 3 'c(1,3)' 行的结果应因此 return:
[1] 1 0 1 0
我好像没法说出来...我想答案应该包括
temp <- strsplit(df$site, ",")
,但是在那一步之后我似乎无法理解如何在列表上应用函数...我会做一个
grepl(c("^11$", "^3$"), temp)
但这不起作用。
由于您正在寻找精确匹配而不是模式匹配,您可以试试这个:
df <- data.frame(site = c("11", " 4 , 111", "3,1 ", "4,11111 "), stringsAsFactors = FALSE)
as.integer(unlist(lapply(strsplit(df$site, split=","), function(x) any(x == 3 | x == 11))))
[1] 1 0 1 0
您可以尝试使用 sapply
as.integer(sapply(df$site,function(x)grepl("^11|^3",x)))
[1] 1 0 1 0
我们可以做一个grep
+(grepl("\b(3|11)\b", df$site))
#[1] 1 0 1 0
我进行了很多搜索,但未能找到解决方案...我认为对于你们中的许多人来说这很容易...但对我而言并非如此。
df <- data.frame(site = c("11", " 4 , 111", "3,1 ", "4,11111 "))
> df
site
1 11
2 4 , 111
3 3,1
4 4,11111
我有一列,其中多个站点代码可能用逗号分隔(不是可能出现的随机空格)。我正在尝试查找与感兴趣的字符串站点编号匹配的行。
搜索站点为 11 或 3 'c(1,3)' 行的结果应因此 return:
[1] 1 0 1 0
我好像没法说出来...我想答案应该包括
temp <- strsplit(df$site, ",")
,但是在那一步之后我似乎无法理解如何在列表上应用函数...我会做一个
grepl(c("^11$", "^3$"), temp)
但这不起作用。
由于您正在寻找精确匹配而不是模式匹配,您可以试试这个:
df <- data.frame(site = c("11", " 4 , 111", "3,1 ", "4,11111 "), stringsAsFactors = FALSE)
as.integer(unlist(lapply(strsplit(df$site, split=","), function(x) any(x == 3 | x == 11))))
[1] 1 0 1 0
您可以尝试使用 sapply
as.integer(sapply(df$site,function(x)grepl("^11|^3",x)))
[1] 1 0 1 0
我们可以做一个grep
+(grepl("\b(3|11)\b", df$site))
#[1] 1 0 1 0