繁体   English   中英

如何匹配字符串中的多个模式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM