多くの異なる UniqueID を持つデータフレームがあり、これも日付順に並べられています。各 UniqueID は、古い日付から新しい日付の順に並べ替えられます。また、1 から 4 までの順序で並べられた、steps という列もあります。
各 UniqueID の目標は、最初のステップの最も古いインスタンス、次に 2 番目のステップの最も古いインスタンスなどを見つけることです。いくつかのステップが欠落している可能性があります。たとえば、ステップ 3 が UniqueID = "B" の場合に欠落しています。この場合、ステップ 3 をスキップしてステップ 4 に進みます。
これが元のデータフレームです。
UniqueID Date Step
1 A 2015-07-03 2
2 A 2015-07-07 3
3 A 2015-07-09 1
4 A 2015-07-14 4
5 A 2015-07-17 1
6 A 2015-07-20 2
7 A 2015-07-23 2
8 A 2015-07-24 3
9 A 2015-07-29 3
10 B 2015-06-01 3
11 B 2015-06-15 2
12 B 2015-06-22 1
13 B 2015-06-29 4
14 B 2015-07-13 2
15 B 2015-06-22 2
16 B 2015-07-08 2
17 B 2015-07-27 4
選択する有効なエントリは、観測 3、6、8、12、14、17 です。このデータフレームを作成します。
UniqueID Date Step
3 A 2015-07-09 1
6 A 2015-07-20 2
8 A 2015-07-24 3
12 B 2015-06-22 1
14 B 2015-07-13 2
17 B 2015-07-27 4
ロジックといくつかの疑似コードがありますが、まとめることはできません。したがって、UniqueID = "A" のデータ フレームの例では、最初にデータ フレームをグループ化します。
group_by(UniqueID)
UniqueID = "A" の最小値を見つけて、変数に割り当てます。
v <- min(Step)
1 を返します
次に、このステップのインデックスを取得します
i <- which.min(Step)
3 を返します
次に、最初のステップよりも大きい最小ステップを見つけ、最初のステップの後に発生する要素のみを検索します。そのため、1 を超える Step の値のみを検索し、最初に見つかった値の位置から、この場合は観察 3 からのみ検索します。次のいずれかになるまで、各 UniqueID のすべての観察に対してこれを繰り返し続けたいと考えています。最後の観測に到達するか、残りの要素で最後の観測よりも大きい観測を見つけることができなくなります。
サンプルデータフレームを作成するための出力は次のとおりです。
structure(list(UniqueID = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), Date = structure(c(16619, 16623, 16625,
16630, 16633, 16636, 16639, 16640, 16645, 16587, 16601, 16608,
16615, 16629, 16608, 16624, 16643), class = "Date"), Step = c(2,
3, 1, 4, 1, 2, 2, 3, 3, 3, 2, 1, 4, 2, 2, 2, 4)), .Names = c("UniqueID",
"Date", "Step"), row.names = c(NA, -17L), class = "data.frame")
jeremycg のメソッドを使用してクラッシュする代替 dput。
structure(list(UniqueID = structure(c(1L, 1L, 1L, 1L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 8L, 8L, 9L, 9L, 10L, 11L), .Label = c("A","B",
"C","D","E","F","G","H","I","J","K"),
class = "factor"), Date = c("3/08/2015",
"21/07/2015", "7/07/2015", "7/07/2015", "29/07/2015", "29/07/2015",
"29/06/2015", "13/07/2015", "9/07/2015", "29/07/2015", "24/07/2015",
"2/07/2015", "16/07/2015", "18/06/2015", "8/07/2015", "29/07/2015",
"12/06/2015", "27/07/2015"), Step = c(1, 1, 4, 4, 4, 3,
5, 5, 1, 4, 1, 2, 2, 2, 3, 3, 2, 2)), .Names = c("UniqueID",
"Date", "Step"), class = c("tbl_df", "data.frame"
), row.names = c(NA, -18L))
編集: jeremycg から更新されたコードを使用してもクラッシュし続ける UniqueID の出力:
structure(list(UniqueID = structure(c(1L, 1L, 1L, 1L, 1L, 1L ), .Label = c("A" ), class = "factor"), Date = structure(c(16619, 16623, 16625, 16630, 16633, 16636), class = "Date"), Step = c(1, 5, 5, 1, 1, 1)), .Names = c("UniqueID", "Date", "Step"), row.names = c(NA, -6L), class = "data.frame")