最近、いくつかのRスクリプトを使ってレポートを作成しています。関連するタスクの1つは、列の値が別のデータフレームの行と一致するかどうかを確認することです。これが当てはまる場合は、新しい列を論理TRUE/FALSEに設定します。Rコードが信じられないほど遅い
は具体的には、私はこのコードのチャンクを改善する助けが必要:
for (i in 1:length(df1$Id)) {
df1 <- within(df1, newCol <- df1$Id %in% df2$Id)
}
df1$newCol <- as.factor(df1$newCol)
それは何である、それを完全に実行するためにproc.time()
でテスト(6分を必要としても意味がありませんので、データセットを約10Kの行を持っていますそれは私がそれを達成するための時間を食べている間違って何をやっている、現在起こっている。また、私はチェックのように他の種類を行う必要があるので、私は実際にこの権利を取得する必要があります。
?
をいただき、ありがとうございますあなたの助け!
あなたのコードはベクトル化されています。 'for'ループは必要ありません。この場合、あなたは*あなたがループの中に 'i'を使用していないことを知ることができます*。あなたが10kの行を持っているなら、あなたは完全な操作を10k回実行しています。機能行 'df1 < - within(df1、newCol < - df1 $ Id%in%df2 $ Id)'の 'for'ラッパーを削除すると、〜10k倍のスピードアップが得られます。 – Gregor
うわー、それはRで初心者のために得たものです:-)ありがとう!それは問題を解決し、理にかなった - 説明のおかげで! –
@Gregor、投稿コメントとして回答...? –