大規模なデータフレーム (数 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)
これはループなしで実行できますか?