に設定高速data.tableとループと私は、データテーブルを持っていると私は日が列名と一致する各行の1を割り当て、各ユニークな毎日のために新しい列を作成し、したいR
私はこれをforループを使って行っていますが、data.tableを使って最適化する方法があるのかどうか、疑問に思っていました。ここで
は一例であり
dt <- data.table(Week_Day = c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"))
Day <- unique(dt$Week_Day)
for (i in 1:length(Day)) {
if (Day[i] != "Sunday") {
dt[, Day[i] := ifelse(Week_Day == Day[i], 1, 0)]
}
}
私のテーブルには、298Kの行であり、それは(下)実行に時間はかかりませんが、長いスクリプトのその部分と、私はかなりの数の非効率的なループを持っているので、I全体の実行時間をダウンさせようとしています。事前に
user system elapsed
0.99 0.06 1.05
感謝を:実行するための
時間。これは、バイナリ二の鎖に検索し、参照することにより、交換してifelse
の排除を含むdata.table
スピードアップのカップルを実装し
Day <- unique(dt$Week_Day)
setkey(dt, Week_Day)
# create columns of 0s
dt[, (Day) := 0L]
for (i in seq_along(head(Day, -1))) {
dt[Day[i], Day[i] := 1L]
}
:
は 'model.matrix()'にも見てください。おそらく、あなたはそのようなものを使いたいかもしれません。 – abhiieor
関連する質問:@arun、ありがとう、@stackoverflow.com/q/18881073/ – Frank