You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言data.table中使用str_match处理列结果异常,如何修正?

问题解决方法

你的问题出在对str_match返回结果的索引逻辑上:str_match接收向量输入时,会返回一个行数等于输入向量长度、列数等于匹配组数量+1的矩阵。你用[1, 2]只提取了矩阵第一行第二列的结果,然后data.table把这个单一值重复赋值给了所有行,所以才会出现所有y都是"b"的情况。

修复方法(最直接高效)

直接提取矩阵的第二列,不需要指定行号,这样每个元素对应每行的匹配结果:

library(data.table)
library(stringr)

pattern.1 <- regex("(?<=a)(.*)(?=c)")
  
DT <- data.table(x = c("abc", "adc", "abd"))
DT[, y := str_match(x, pattern.1)[, 2]]

DT

运行结果就是你预期的:

x    y
1: abc    b
2: adc    d
3: abd <NA>

另一种逐行处理的方式(适合复杂场景)

如果需要更灵活的逐行处理,可以用lapply或者purrr的映射函数,不过对于这个场景来说上面的方法足够高效:

library(purrr)
DT[, y := map_chr(x, function(val) str_match(val, pattern.1)[, 2])]

内容的提问来源于stack exchange,提问作者Ian Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:05