我正在对一个大型数据帧(几个100k行)中的一列字符串进行替换,并且在漫长的例程中我必须多次这样做。我想以矢量化的方式编写它,但无法弄清楚这样做的方法。目前我必须使用一个全长循环,每次花几分钟,分别逐步遍历每一行。
我无法在功能上执行此操作的原因似乎是,对于每个行值,我需要能够在str_extract
(或grepl
)命令中专门引用它。不知道怎么做没有索引。 (目标是使用0来将每个可变长度字符串的前导数字部分填充到6位数。条目可能看起来像“1234XYZ”。)
for (i in 1:nrow(df)) {
df$A[i] <- gsub("^[[:digit:]]+",
paste(paste(rep(0,6-nchar(str_extract(df$A[i],"^[[:digit:]]+"))), collapse=""),
str_extract(df$A[i], "^[[:digit:]]+"), collapse=""), df$A[i])
}
显然,我天真地尝试作为“矢量化版本”的以下内容不起作用,因为str_extract
返回一个带有每行df条目的向量:
df$A <- gsub("^[[:digit:]]+",
paste(paste(rep(0,6-nchar(str_extract(df$A,"^[[:digit:]]+"))), collapse=""),
str_extract(df$A, "^[[:digit:]]+"), collapse=""), df$A)
这可以在没有循环的情况下完成吗?
答案 0 :(得分:0)
如果没有可重复的数据,很难确定,但我认为这对您有用
front <- str_pad(str_extract(df$A, "^[[:digit:]]+"), 6, pad="0")
back <- str_extract(df$A, "[^0-9]+")
df$A <- paste(front, back, sep="")