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

问题描述 投票:2回答:1

我在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列。

如果有人可以帮助修改和加快这个过程,我真的很感激。

非常感谢,

r string substring extract
1个回答
3
投票

我们可以使用str_extract指定模式匹配数字(\\d+)跟随正则表达式后面的数字(\\d),然后是=

library(stringr)
df[-1] <- do.call(rbind, str_extract_all(df$X1, "(?<=\\d\\=)[^,]+"))

或者使用tstrsplitdata.table

library(data.table)
setDT(df)[, (2:4) := tstrsplit(X1, "\\d+=|,")[c(FALSE, TRUE)]]
© www.soinside.com 2019 - 2024. All rights reserved.