R 不使用循环替换多个数据帧行中的字符串
我正在对一个大数据帧(几个100k行)中的一列字符串进行替换,在一个漫长的例程中,我必须进行多次替换。我想用一种矢量化的方式来写这篇文章,但是我想不出一个方法来完成它。目前,我必须使用一个全长循环,每次需要几分钟的时间,分别通过每一行 我不能从功能上这样做的原因似乎是,对于每一行值,我需要能够在R 不使用循环替换多个数据帧行中的字符串,r,R,我正在对一个大数据帧(几个100k行)中的一列字符串进行替换,在一个漫长的例程中,我必须进行多次替换。我想用一种矢量化的方式来写这篇文章,但是我想不出一个方法来完成它。目前,我必须使用一个全长循环,每次需要几分钟的时间,分别通过每一行 我不能从功能上这样做的原因似乎是,对于每一行值,我需要能够在stru extract(或grepl)命令中特别引用它,我不知道如何在没有索引的情况下进行引用。(目标是使用0将每个可变长度字符串的前导数字部分填充到6位。条目可能看起来像“1234XYZ”。) 没有循
stru extract
(或grepl
)命令中特别引用它,我不知道如何在没有索引的情况下进行引用。(目标是使用0将每个可变长度字符串的前导数字部分填充到6位。条目可能看起来像“1234XYZ”。)
没有循环能做到这一点吗?如果没有可复制的数据,很难说是肯定的,但我认为这对你来说是可行的
front <- str_pad(str_extract(df$A, "^[[:digit:]]+"), 6, pad="0")
back <- str_extract(df$A, "[^0-9]+")
df$A <- paste(front, back, sep="")
front您能包含一点数据吗。framedf
<代码>dput(头部(df))
。否则你的代码就不可复制了,我们也帮不上什么忙!就这样。两个启示:没有想到把所有的后端和前端分开;并忽略了str\u pad
。谢谢(实际实现有点不紧凑,因为我发现我需要在剥离和填充步骤之间剔除NAs。)我刚刚意识到这里的关键是stringr
方法都是矢量化的,而grep
\sub
不是。也就是说,在我的原始矢量化样本中使用str_replace
而不是gsub
,效果很好。呵呵:)
df$A <- gsub("^[[:digit:]]+",
paste(paste(rep(0,6-nchar(str_extract(df$A,"^[[:digit:]]+"))), collapse=""),
str_extract(df$A, "^[[:digit:]]+"), collapse=""), df$A)
front <- str_pad(str_extract(df$A, "^[[:digit:]]+"), 6, pad="0")
back <- str_extract(df$A, "[^0-9]+")
df$A <- paste(front, back, sep="")