我正在对大型数据帧(几 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)
这可以在没有循环的情况下完成吗?