data.table 中的多个正则表达式匹配和赋值

Multiple regex match and assignment in data.table

我正在尝试匹配输出多个值的正则表达式并将其就地分配给 data.table

中的几个新变量
library(data.table)
library(stringr)

fruit_regex <- "(\d+): apples=(.*), oranges=(.*)"

DT <- data.table(V1=c("1: apples=0.1, oranges=0.01",
            "2: apples=0.2, oranges=0.02",
            "3: apples=0.3, oranges=0.03",
            "4: apples=0.4, oranges=0.04",
            "5: apples=0.5, oranges=0.05"))

DT[, c("txt","id","apples", "oranges"):= as.list(str_match_all(V1, fruit_regex))]

这当然失败了,我得到了

>Warning messages:
>1: In `[.data.table`(DT, , `:=`(c("txt", "id", "apples", "oranges"),  :
>  Supplied 4 columns to be assigned a list (length 5) of values (1 unused)

str_match_all() 说要对模式和字符串进行矢量化,但由于某种原因我无法让它工作。

我的正则表达式还有另一个已知问题,returns 是一个冗余的完全匹配项,可以通过环视断言解决。

期望的结果(远离冗余的 V1txt 字段):

id apples oranges
1      0.1   0.01
2      0.2   0.02
3      0.3   0.03
4      0.4   0.04
5      0.5   0.05

您需要将结果转换为 R 可以插入数据框的内容,例如另一个数据框。 例如,使用 "plyr" 包

解决
library(data.table)
library(stringr)
library(plyr)
fruit_regex <- "(\d+): apples=(.*), oranges=(.*)"

DT <- data.table(V1=c("1: apples=0.1, oranges=0.01",
        "2: apples=0.2, oranges=0.02",
        "3: apples=0.3, oranges=0.03",
        "4: apples=0.4, oranges=0.04",
        "5: apples=0.5, oranges=0.05"))

DT[, c("txt","id","apples", "oranges"):= ldply(str_match_all(V1, fruit_regex))]