各id
の範囲内で、少なくとも91日離れている行を保持したいと思います。私のデータフレームdf
では、id=1
は5行、id=2
は1行です。Rの行間の日付の違いに基づいて行をフィルタリングする方法はありますか?
id=1
については、1行目、3行目、5行目のみを保存したいと考えています。
これは、第1の日付と第2の日付を比較すると、32日ごとに異なるためです。したがって、2番目の日付を削除してください。 1日目と3日目の比較を行い、152日の違いがあります。だから、私たちは3日目を維持する。
ここで、最初の日付を参照として使用する代わりに、3番目の日付を使用します。 3日目と4日目は61日ごとに異なります。したがって、4番目の日付を削除してください。 3日目と5日目の比較を行い、121日間が異なります。だから、我々は5日目を維持する。
最終的に、私たちが保持する日付は1日目、3日目および5日目です。 id=2
については、1つの行しかないので、私たちはそれを保ちます。希望の結果はdfnew
に表示されます。
df <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 B 2006-02-02
1 C 2006-06-02
1 D 2006-08-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
dfnew <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 C 2006-06-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
私は次のようにid
でdf
をグループ化から始まると考えることができます:
library(dplyr)
dfnew <- df %>% group_by(id)
はしかし、私はここから継続する方法を確認していません。 filter
機能またはslice
を続行する必要がありますか?もしそうなら、どうですか?
は多分 'Date'クラスに変換します。
デビッドArenburgによって示唆されるように、グループで最初の代わりに、Dateクラスに
date
を変換することをお勧めします –@DavidArenburg:ありがとう、あなたのコメントは常に高く評価されています。私は編集をしました。 – aichao