【发布时间】:2019-09-06 16:49:47
【问题描述】:
我想从一个字符串中提取不是在另一个字符串中的元素。
最快的(矢量化?)方法是什么?
模拟数据:
library(data.table)
dt <- data.table(id = c("A", "B", "C", "D"),
product= c("1", "1,2", "1,2,3", "4"),
stock= c("2, 3", "1,2", "1,2", "4"))
> dt
id product stock
1: A 1 2, 3
2: B 1,2 1,2
3: C 1,2,3 1,2
4: D 4 4
我正在寻找的是一个名为new 的新变量,它包含product 中不在stock 中的元素。
> dt
id product stock new
1: A 1 2, 3 1
2: B 1,2 1,2 <NA>
3: C 1,2,3 1,2 3
4: D 4 4 <NA>
注意:它似乎与stringr::str_extract_all 完全相反,但是这个函数没有negate 函数。
【问题讨论】:
-
transform(dt,new = mapply(gsub,gsub(',','|,|',dt$stock),'',dt$product,USE.NAMES = F))从基础 R 或使用dt%>%mutate(new = str_replace_all(product,gsub(',','|,|',stock),''))从tidyverse
标签: r regex data.table stringr