如何匹配字符串中的多个模式?
how to match multiple patterns in string?
如何匹配多个模式并获取与该模式对应的值。
我有一个这样的 table :
library(data.table)
set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
value = runif(5))
模式 table 是这样的:
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
我知道我应该使用正则表达式,但不知道如何匹配多个模式,有什么帮助吗?
grep category
of table2 with names
of table1 得到table1 names
的值赋值给table2。一旦我们在两个表中都有 names
,我们可以使用基于 on = .(names)
的 join
方法并将表 2 中的 size
绑定到表 1。
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'))
我们可以 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
如何匹配多个模式并获取与该模式对应的值。
我有一个这样的 table :
library(data.table)
set.seed(1)
table_1 <- data.table(names = c('bluecdsd','red321','yellowVsds523','423_black','ewrwblack'),
value = runif(5))
模式 table 是这样的:
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
我知道我应该使用正则表达式,但不知道如何匹配多个模式,有什么帮助吗?
grep category
of table2 with names
of table1 得到table1 names
的值赋值给table2。一旦我们在两个表中都有 names
,我们可以使用基于 on = .(names)
的 join
方法并将表 2 中的 size
绑定到表 1。
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'))
我们可以 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