我在r中有一个数据框看起来像这样。
df<-data.frame(matrix(NA, nrow = 4, ncol = 4))
df[,1]<-c("472=20140112224524497,5752=122524,223=ZHRR6,69=0,"
,"472=20140112224606569,223=BNCG6,315=CC26R,69=22,"
,"50=986,472=20140112224607924,223=ZHCG6,69=98,"
,"66=2315,472=20140112224502367,379=2016,223=CMCG9,69=274,")
我想要的是从第一列中提取字符串并填充每行的第2到第4列。
第2列,我需要在472 =和之后的第一个“,”之间的字符串。
第3列,我需要在223 =和之后的第一个“,”之间的字符串。
第4列,我之后需要69 =和第一个“,”之间的字符串。
数据没有模式,值可以是整数或字母。
我目前的代码是:
df[,2:4]<-c(unlist(ex_between(df$X1, c('472='), c(','), extract=TRUE))
,unlist(ex_between(df$X1, c('223='), c(','), extract=TRUE))
,unlist(ex_between(df$X1, c('69='), c(','), extract=TRUE)))
这段代码有效。但是,它非常慢,因为我每天有超过100万行,需要填充12列。
如果有人可以帮助修改和加快这个过程,我真的很感激。
非常感谢,
我们可以使用str_extract
指定模式匹配数字(\\d+
)跟随正则表达式后面的数字(\\d
),然后是=
library(stringr)
df[-1] <- do.call(rbind, str_extract_all(df$X1, "(?<=\\d\\=)[^,]+"))
或者使用tstrsplit
的data.table
library(data.table)
setDT(df)[, (2:4) := tstrsplit(X1, "\\d+=|,")[c(FALSE, TRUE)]]