2

我正在对大型数据帧(几 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)

这可以在没有循环的情况下完成吗?

4

1 回答 1

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="")
于 2012-11-21T17:15:52.100 回答