提取字符串并填充到 r 中的其他列

extract string and fill to other columns in r

我在 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)]]