gpt4 book ai didi

r - 按组查找最接近的值

转载 作者:行者123 更新时间:2023-12-01 13:18:29 24 4
gpt4 key购买 nike

我正在寻找一种实用的方法来使用(最好)data.table 为每个组检索最接近 0 的值。

假设以下DT:

set.seed(1)
library(data.table)
DT <- data.table(val = rnorm(1000), group = rep(1:10, each = 10)) # 10 groups

我尝试将 by = grouproll = "nearest" 结合起来,但它只返回最近的值 across 而不是组:

DT[val == 0, val, by = group, roll = "nearest"]
# group value
#1: 8 0.001105352

我当然可以为每个组重复该过程,但随着组数的增加,这将不切实际。例如:

res <- rbind(DT[val == 0 & group = 1, val, by = group, roll = "nearest"],
DT[val == 0 & group = 2, val, by = group, roll = "nearest"],
DT[val == 0 & group = 3, val, by = group, roll = "nearest"],
...)

也许我缺少一些 data.table 功能?

最佳答案

您不一定需要加入。

使用 minabs 组合的可能解决方案:

DT[, .(closest.val.to.zero = val[abs(val) == min(abs(val))]), by = group]

给出:

    group closest.val.to.zero
1: 1 0.011292688
2: 2 -0.016190263
3: 3 0.002131860
4: 4 0.004398704
5: 5 0.017395620
6: 6 0.002415809
7: 7 0.004884450
8: 8 0.001105352
9: 9 -0.040150452
10: 10 -0.010925691

选项的更一般化方式为 posted by @chinsoon12 in the comments :

DT[CJ(group = group, val = 0, unique = TRUE)
, on = .(group, val)
, .(group, closest.val.to.zero = x.val)
, roll = "nearest"]

关于r - 按组查找最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363840/

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