Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 不使用循环替换多个数据帧行中的字符串_R - Fatal编程技术网

R 不使用循环替换多个数据帧行中的字符串

R 不使用循环替换多个数据帧行中的字符串,r,R,我正在对一个大数据帧(几个100k行)中的一列字符串进行替换,在一个漫长的例程中,我必须进行多次替换。我想用一种矢量化的方式来写这篇文章,但是我想不出一个方法来完成它。目前,我必须使用一个全长循环,每次需要几分钟的时间,分别通过每一行 我不能从功能上这样做的原因似乎是,对于每一行值,我需要能够在stru extract(或grepl)命令中特别引用它,我不知道如何在没有索引的情况下进行引用。(目标是使用0将每个可变长度字符串的前导数字部分填充到6位。条目可能看起来像“1234XYZ”。) 没有循

我正在对一个大数据帧(几个100k行)中的一列字符串进行替换,在一个漫长的例程中,我必须进行多次替换。我想用一种矢量化的方式来写这篇文章,但是我想不出一个方法来完成它。目前,我必须使用一个全长循环,每次需要几分钟的时间,分别通过每一行

我不能从功能上这样做的原因似乎是,对于每一行值,我需要能够在
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您能包含一点数据吗。frame
df
<代码>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="")