次のコマンドで取得したものと同様のデータ テーブルがあります。
dt <- data.table(
time = 1:8,
part = rep(c(1, 1, 2, 2), 2),
type = rep(c('A', 'B'), 4),
data = rep(c(runif(1), 0), 4))
基本的に、このようなテーブルには 2 つの異なるタイプのインスタンス (A または B) が含まれます。時間列には、リクエストが特定の部分に到着したとき、または特定の部分から離れたときのタイムスタンプが含まれています。インスタンス タイプが A の場合、タイムスタンプは到着時刻 (enter) を示し、タイプが B の場合、タイムスタンプは出発時刻 (exit) を示します。
time part type data
1: 1 1 A 0.5842668
2: 2 1 B 0.0000000
3: 3 2 A 0.5842668
4: 4 2 B 0.0000000
5: 5 1 A 0.5842668
6: 6 1 B 0.0000000
7: 7 2 A 0.5842668
8: 8 2 B 0.0000000
A インスタンスと B インスタンスをペアにして、次のデータ テーブルを取得したいと考えています。
part data enter.time exit.time
1: 1 0.4658239 1 2
2: 1 0.4658239 5 6
3: 2 0.4658239 3 4
4: 2 0.4658239 7 8
私は次のことを試しました:
pair.types <- function(x) {
a.type <- x[type == 'A']
b.type <- x[type == 'B']
return(data.table(
enter.time = a.type$time,
exit.time = b.type$time,
data = a.type$data))
}
dt[, c('enter.time', 'exit.time', 'data') := pair.types(.SD), by = list(part)]
しかし、それは私に次のことを与えますが、これはまさに私が望むものではありません:
time part type data enter.time exit.time
1: 1 1 A 0.3441592 1 2
2: 2 1 B 0.3441592 5 6
3: 3 2 A 0.3441592 3 4
4: 4 2 B 0.3441592 7 8
5: 5 1 A 0.3441592 1 2
6: 6 1 B 0.3441592 5 6
7: 7 2 A 0.3441592 3 4
8: 8 2 B 0.3441592 7 8
ちょっと近いですが、列「type」が保持されているため、一部の行が重複しています。おそらく、列「時間」と「タイプ」を削除してから、行の後半を削除してみてください。しかし、それがすべての場合にうまくいくかどうかはわかりません。この操作を行うためのより良い方法を学びたいと思います。