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))