私は 2 つの data.tables を持ってmain
おりmetrics
、両方とも をキーとして、メトリックにあるいくつかの値のそれぞれの平均cid
をテーブルに追加したいと考えています。main
ただし、指定code
された でそれらの行のみを平均して、 でフィルタリングしたいと思います。metrics
code
> metrics
cid code DZ value1 value2
1: 1001 A 101 8 21
2: 1001 B 102 11 26
3: 1001 A 103 17 25
4: 1002 A 104 25 39
5: 1002 B 105 6 30
6: 1002 A 106 23 40
7: 1003 A 107 27 32
8: 1003 B 108 16 37
9: 1003 A 109 14 42
# DESIRED OUTPUT
> main
cid A.avg.val1 A.avg.val2 B.avg.val1 B.avg.val2
1: 1001 12.5 23.0 11 26
2: 1002 24.0 39.5 6 30
3: 1003 20.5 37.0 16 37
# SAMPLE DATA
set.seed(1)
main <- data.table(cid=1e3+1:3, key="cid")
metrics <- data.table(cid=rep(1e3+1:3, each=3), code=rep(c("A", "B", "A"), 3), DZ=101:109, value1=sample(30, 9), value2=sample(20:50, 9), key="cid")
code.filters <- c("A", "B")
これらの行は目的の出力を取得しますが、新しい列をメインに戻すのが困難です。(また、プログラムで実行することをお勧めします)。
main[metrics[code==code.filters[[1]]]][, list(mean(c(value1))), by=cid]
main[metrics[code==code.filters[[1]]]][, list(mean(c(value2))), by=cid]
main[metrics[code==code.filters[[2]]]][, list(mean(c(value1))), by=cid]
main[metrics[code==code.filters[[1]]]][, list(mean(c(value2))), by=cid]
さらに、次の行が各グループの最後の値のみを取得する理由を誰かが説明できますか?
main[metrics[ code=="A"], A.avg.val1 := mean(c(value1))]