gpt4 book ai didi

r - 加入两个 data.tables 后创建新列

转载 作者:行者123 更新时间:2023-12-04 10:39:15 26 4
gpt4 key购买 nike

我有两个 data.tables,mainmetrics,都由 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")

这些行获得了所需的输出,但我很难将新的 col 分配回 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))]

最佳答案

你不需要main。您可以直接从 metrics 获取它,如下所示:

> tmp.dt <- metrics[, list(A.avg.val1 = mean(value1[code=="A"]), 
A.avg.val2 = mean(value2[code=="A"]),
B.avg.val1 = mean(value1[code == "B"]),
B.avg.val2 = mean(value2[code == "B"])), by=cid]

# 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

如果您仍想使用 main 子集,只需执行以下操作:

main <- data.table(cid = c(1001:1002))
> tmp.dt[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

关于r - 加入两个 data.tables 后创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14510305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com