R语言使用str_match_all生成新列为list如何转为character类型
问题解决方法
str_match_all 返回值本身就是列表格式:每个输入字符串的所有匹配结果会以字符向量的形式存在列表的对应位置,所以直接赋值给数据框列后列类型为list。你可以按照以下两种场景选择解法:
场景1:每行最多匹配1个链接(你的场景适用)
直接替换str_match_all为str_extract即可,该函数默认返回每行第一个匹配结果,输出格式本身就是字符向量:
library(stringr) asd <- data.frame(a = c("<a href=https://abc>Click Here</a>","sdsd","<a href=https://xvd>Click Here</a>")) # 同时修正正则,避免匹配到a标签的闭合>和后续文字 asd$ew <- str_extract(asd$a, "https?://[^> ]+") # 验证类型 class(asd$ew) # 输出 "character"
上述代码同时修正了你的正则规则,原规则会把>Click也匹配到结果里,调整为[^> ]+后会在遇到标签闭合符或空格时停止匹配,得到干净的链接。
场景2:每行可能匹配多个链接
如果需要保留所有匹配结果,同时把列转为字符型,可以将每个行的所有匹配结果用分隔符拼接后再赋值:
asd$ew <- sapply( str_match_all(asd$a, "https?://[^> ]+"), function(x) paste(x, collapse = ",") # 多个链接用逗号分隔,无匹配返回空字符串 )
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

