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 に答える