私は5M行のdata.tableオブジェクトを持っています。列が前の行に変更されないdata.tableの行を削除する
csvdata <- data.table(timestamp = c(1:6),
signal.a=c(12, 12, 13, 12, 12, 14),
signal.b=c(7, 7, 7, 7, 8, 8))
timestamp signal.a signal.b
1 12 7
2 12 7
3 13 7
4 12 7
5 12 8
6 14 8
私がしようとしているのは、信号の変更を登録していないテーブルのすべての行を削除することです。ですから、私はこれで終わりたいと思います:signal.aもsignal.bも変更されていないので、行2は削除されます。
timestamp signal.a signal.b
1 12 7
3 13 7
4 12 7
5 12 8
6 14 8
私はRでの経験がほとんどないので、私は削除のために各行をマークし、後で私が維持したい行をフィルタリングするために意図してforループの通常のアプローチを試してみました:
for (i in 1:nrow(csvdata)) {
if (i > 1 && csvdata[i]$signal.a == csvdata[i-1]$signal.a &&
csvdata[i]$signal.b == csvdata[i-1]$signal.b) {
csvdata[i]$Drop <- 1
}
}
コードは機能しているようですが、5M行ではこのコードは永久に実行されます(2時間とカウント)。より効率的なソリューションはありますか?
です単純に重複を削除します。信号が12と7に戻って、タイムスタンプ7で言えば、私はその行を保持したいと思います。 – cddbldot