r - 如何有效地匹配和组合 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
每一行的条目。
解决方案
一种选择使用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