データセットに期間 ( Time
) が ab からの範囲の整数である列があります。特定のグループの期間が欠落している場合があります。それらの行を で埋めたいと思いNA
ます。以下は、(数千の) 1 つのグループのサンプル データです。
structure(list(Id = c(1, 1, 1, 1), Time = c(1, 2, 4, 5), Value = c(0.568780482159894,
-0.7207749516298, 1.24258192959273, 0.682123081696789)), .Names = c("Id",
"Time", "Value"), row.names = c(NA, 4L), class = "data.frame")
Id Time Value
1 1 1 0.5687805
2 1 2 -0.7207750
3 1 4 1.2425819
4 1 5 0.6821231
ご覧のとおり、Time 3 が欠落しています。多くの場合、1 つまたは複数が欠落している可能性があります。私はこれを自分で解決できますが、これを最も効率的な方法で行うことはできないのではないかと心配しています。私のアプローチは、次の関数を作成することです。
から までの一連の期間を生成min(Time)
するmax(Time)
次に、setdiff
欠損Time
値を取得するために a を実行します。
そのベクトルをdata.frame
一意の識別子変数 (Id
および上記以外の変数) を取得し、それをこの data.frame に追加します。
2つをマージします。
関数から戻ります。
したがって、プロセス全体が次のように実行されます。
# Split the data into individual data.frames by Id.
temp_list <- dlply(original_data, .(Id))
# pad each data.frame
tlist2 <- llply(temp_list, my_pad_function)
# collapse the list back to a data.frame
filled_in_data <- ldply(tlist2)
これを達成するためのより良い方法は?