【问题标题】:extract string and fill to other columns in r提取字符串并填充到r中的其他列
【发布时间】:2018-05-30 20:34:24
【问题描述】:

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

如果有人可以帮助修改和加快流程,我将不胜感激。

非常感谢,

【问题讨论】:

  • 尝试 strsplit 与每一行的逗号,要么你也需要应用,或者它本身按行工作

标签: r string substring extract


【解决方案1】:

我们可以使用 str_extract 指定模式来匹配数字 (\\d+),这些数字 (\\d+) 在正则表达式后面查找数字 (\\d),后跟 =

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

或者使用来自data.tabletstrsplit

library(data.table)
setDT(df)[, (2:4) := tstrsplit(X1, "\\d+=|,")[c(FALSE, TRUE)]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2023-03-16
    • 2021-12-21
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多