首页 > 解决方案 > 如何有效地匹配和组合 data.table 中的字符串

问题描述

考虑一个样本数据集:

dt <- data.table(data.frame(V1 = c("C1/R3","M2/R4")))
> dt
      V1
1: C1/R3
2: M2/R4

对于 的每一行dt,我想提取连接的字符 C、M 或 R。例如,

dt[,V2 := stri_join_list(str_match_all(V1,"[CMR],sep="",collapse=""),by=seq_len(nrow(dt))]
> dt
         V1 V2
1:    C1/R3 CR
2:    M2/R4 MR

但是,我有 4200 万行,上面的代码还不够高效。有没有办法在不使用逐行操作的情况下做到这一点?当我跳过 by 参数时,我得到CRMR每一行的条目。

标签: rstringdata.table

解决方案


一种选择使用sub

dt <- data.table(data.frame(V1 = c("C1/R3","M2/R4")))
dt$V2 <- sub("^([A-Z]+)[0-9]+/([A-Z]+)[0-9]+", "\\1\\2", dt$V1)
dt
     V1 V2
1 C1/R3 CR
2 M2/R4 MR

演示


推荐阅读