在R中找到字符串向量

时间:2014-12-04 11:28:34

标签: r string

我有一个字符串向量,如:

vector=c("a","hb","cd")

我还有一个有列的矩阵,此列的每个元素都是由"|"分隔符分隔的字符串列表,如:

1 "ab|hb"

2 "ab|hbc|cd"

我想找到每个向量的字符串完全出现在矩阵的哪一行。

对于上面的矢量,结果是:

NA, 1, 2

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