R data.table中的多个正则表达式匹配和赋值
我正在尝试匹配一个输出多个值的正则表达式,并将其指定给data.table中的几个新变量R data.table中的多个正则表达式匹配和赋值,r,data.table,stringr,R,Data.table,Stringr,我正在尝试匹配一个输出多个值的正则表达式,并将其指定给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", "
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))]
str\u match\u all()
表示要在模式和字符串上进行矢量化,但由于某些原因,我无法使其工作
我的正则表达式还有一个已知的问题,它返回一个冗余的完全匹配,可以通过lookaround断言来解决
所需结果(从冗余的V1
和txt
字段中查看):
您需要将结果转换为R可以插入到数据帧中的内容,例如另一个数据帧。 例如,使用“plyr”包解决
库(data.table)
图书馆(stringr)
图书馆(plyr)
fruit_regex Shahar,非常感谢您提出ldply
。我还意识到,purrr::transpose()
也有类似的帮助,然后我发现data.table
也可以转换列表。我的文件的性质没有我在示例中提供的那么同质,因此我将有几个匹配模式应用于文件的不同子集。我还试图导入尽可能少的包,因为这可能会在它自己的包中结束。不过,谢谢你的主意!随时总体思路是简单地确保生成的结构是您希望的方式。我只是简单地选择了我想到的第一个函数,尽管我同意转置更优雅(它直接说明了你想要发生什么,而ldply正好在这里工作)
>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)
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
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))]