提取出现在数据框列中的向量元素?

时间:2018-04-13 17:21:34

标签: r grep

示例数据:

vec <- c(21, 23, 25)
df <- data.frame(lines=c("line_21.1", "line_21.2", "line_25.1", "line_25.2", "line_223.1", "line_223.2"), values=c(1, 3, 4, 2, 2, 2))

df

lines      values
line_21.1  1
line_21.2  3
line_25.1  4
line_25.2  2
line_223.1 2
line_223.2 2

我想仅对vec中包含的df$lines元素进行子集化。所以这个例子的期望输出是:

vec2

21, 25

我试过了:

 vec2 <- sapply(vec, function(x) grep(x, df$lines))

但由于223条目,这导致23被错误地包括在内:

[[1]]
[1] 1, 2

[[2]]
[1] 5 6

[[3]]
[1] 3, 4

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我们可以使用gsub删除'lines'中的子字符串,然后执行intersect以获取两者中常见的元素

vec2 <- intersect(gsub(".*_|\\.\\d+", "", df$lines), vec)
vec2
#[1] 21 25

答案 1 :(得分:2)

> num <- gsub(".*_(\\d+).*", "\\1", df$lines)
> vec[vec %in% num]
[1] 21 25

答案 2 :(得分:1)

对vec2计算的小修改。这应该工作

vec2 <- sapply(vec, function(x) grep(paste("_",x,".",sep = ""), df$lines))