[英]how to match multiple patterns in string?
如何匹配多个模式并获取与该模式对应的值。
我有这样一张桌子:
library(data.table)
set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
value = runif(5))
和模式表这样:
table_2 <- data.table(category = c('black','blue','red','white'),
size = c('small','little','large','huge'))
我想要的结果是什么:
names value size
1: bluecdsd 0.5995658 little
2: red321 0.4935413 large
3: yellowVsds523 0.1862176 NA
4: 423_black 0.8273733 small
5: ewrwblack 0.6684667 small
我知道我应该使用regexpr,但不知道如何匹配多个模式,任何帮助请?
我们可以extract
子字符串并进行match
library(stringr)
table_1[, size := table_2$size[match(str_extract(names,
paste(table_2$category, collapse="|")), table_2$category)]]
table_1
# names value size
#1: bluecdsd 0.2655087 little
#2: red321 0.3721239 large
#3: yellowVsds523 0.5728534 NA
#4: 423_black 0.9082078 small
#5: ewrwblack 0.2016819 small
table2的grep category
,其names
为table1,并获取table1的names
值并将其分配给table2。 一旦我们在两个表中都有names
,我们就可以使用基于on = .(names)
join
方法并将table2的size
绑定到table1。
library(data.table)
table_2 <- table_2[, .(names = grep( unique(category), table_1[, names], value = TRUE ), size = size ),
by = category ]
table_2 <- table_2[!is.na(names), ]
table_1[table_2, `:=` ( size = i.size), on = c('names')]
table_1
# names value size
# 1: bluecdsd 0.2655087 little
# 2: red321 0.3721239 large
# 3: yellowVsds523 0.5728534 NA
# 4: 423_black 0.9082078 small
# 5: ewrwblack 0.2016819 small
数据:
set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
value = runif(5))
table_2 <- data.table(category = c('black','blue','red','white'),
size = c('small','little','large','huge'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.