后创造新的专栏中,我有两个data.tables,main
和metrics
,都是由cid
我要添加到表main
平均每个位于度量几个值的键。连接两个data.tables
但是,我想筛选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中。 (另外,以编程方式进行则是首选)。
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))]
其实它不是在数据库中存储计算值一个很好的做法。这些应该在输出数据时完成。 – N1tr0
也许,'不是一个好习惯'是错误的术语。也许,'有什么意义'更好? :-)计算值的一个主要方面是它们发生了变化,为什么要在运行中计算并始终准确时存储该数据?如果你存储它并去调用它,它可能已经过时并且不正确。 – N1tr0
@ N1tr0,我想你可能误解了这个问题:我没有将值存储回数据库,我将它存储在data.table中,即存储器中。 –