提取字符串并填充到 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)]]
我在 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)]]