我有一个字符串向量,如:
vector=c("a","hb","cd")
我还有一个有列的矩阵,此列的每个元素都是由"|"
分隔符分隔的字符串列表,如:
1 "ab|hb"
2 "ab|hbc|cd"
我想找到每个向量的字符串完全出现在矩阵的哪一行。
对于上面的矢量,结果是:
NA, 1, 2
答案 0 :(得分:2)
您可以使用strsplit
分割字符串:
x <- strsplit("ab|hbc|cd", split="|", fixed=T)
然后检查数据中是否出现vector
的值,例如
sapply(vector, function(x) x %in% strsplit("a|ab|cd|efg|bh",
split="|", fixed=T)[[1]])
警告:strsplit
将数据作为列表输出,因此在上面的示例中,我仅使用[[1]]
提取列表的第一个元素,但是如果您选择,则可以以其他方式处理它。
编辑:回答关于数据的问题作为向量:
data <- c("ab|cd|ef", "aaa|b", "ab", "wf", "fg|hb|a", "cd|cd|df")
sapply(sapply(data, function(x) strsplit(x, split="|", fixed=T)[[1]]),
function(y) sapply(vector, function(z) z %in% y))
答案 1 :(得分:1)
这是一种使用正则表达式的方法:
# Example data
vector <- c("a","hb","cd")
mat <- matrix(c("ab|hb", "ab|hbc|cd"), nrow = 2)
sapply(paste0("\\b", vector, "\\b"), function(x)
if(length(tmp <- grep(x, mat[ , 1]))) tmp else NA,
USE.NAMES = FALSE)
# [1] NA 1 2