R 提取数据帧列中出现的向量元素?

R 提取数据帧列中出现的向量元素?,r,regex,R,Regex,示例数据: 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

示例数据:

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
我试过这个:

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

有什么建议吗?

我们可以使用
gsub
删除“lines”中的子字符串,然后执行
相交
以获得两者中的公共元素

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

vec2我们可以使用
gsub
删除“行”中的子字符串,然后执行
相交
以获得两者中的公共元素

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

对vec2计算的小修改。这应该行得通

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

vec2对vec2计算的小修改。这应该行得通

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

vec2只要OP在“vec”中没有重复项,这两种方法都是正确的。如果是这样,你的方法就更正确。只要OP在“vec”中没有重复项,这两种方法都是正确的。如果是这样的话,你的方法就更正确了。
vec2 <- sapply(vec, function(x) grep(paste("_",x,".",sep = ""), df$lines))