gpt4 book ai didi

r - 将重叠间隔的信息包含到 data.frame 中

转载 作者:行者123 更新时间:2023-12-02 09:31:48 25 4
gpt4 key购买 nike

我有两个数据框:

dfA
" ID from to Lith
1 BG1 0 0.5 SED
2 BG1 0.5 0.6 GDI
3 BG1 0.6 2.8 GRN
3 ZH4 0 0.7 GRN
4 ZH4 0.7 3.0 GDI

dfB
" ID from to Weath
1 BG1 0 0.8 HW
2 BG1 0.8 1.5 SW
3 BG1 1.5 2.6 HW
4 ZH4 0 0.3 HW
5 ZH4 0.3 2.6 SW

我想要 dfA 中“Lith”的信息作为 dfB 中重叠(从“到”)的百分比。结果应该如下所示:

dfC
" ID from to Weath GRN GDI SED
1 BG1 0 0.8 HW 0.25 0.125 0.625
2 BG1 0.8 1.5 SW 1 0 0
3 BG1 1.5 2.6 HW 1 0 0
4 ZH4 0 0.3 HW 1 0 0
5 ZH4 0.3 2.6 SW 0.1739 0.8261 0

请注意,dfA 的间隔与 dfB 的间隔不一致,并且仅检查相同 ID 的重叠。另请注意,在 dfB 的一个间隔内最多可以有 3 次重叠。 dfA 的间隔始终大于 dfB。

到目前为止,我的尝试都陷入了死胡同。按 ID 拆分 df 不是一个选项,因为原始数据量非常巨大。

最佳答案

这是一个可能的foverlaps解决方案

library(data.table)
setkey(setDT(dfA), ID, from, to)
setkey(setDT(dfB), ID, from, to)
res <- foverlaps(dfA, dfB)[, overlap := (pmin(to, i.to) - pmax(from, i.from))/(to - from)]
dcast(res, ID + from + to + Weath ~ Lith, value.var = "overlap", fill = 0)
# ID from to Weath GDI GRN SED
# 1: BG1 0.0 0.8 HW 0.125000 0.250000 0.625
# 2: BG1 0.8 1.5 SW 0.000000 1.000000 0.000
# 3: BG1 1.5 2.6 HW 0.000000 1.000000 0.000
# 4: ZH4 0.0 0.3 HW 0.000000 1.000000 0.000
# 5: ZH4 0.3 2.6 SW 0.826087 0.173913 0.000

  • key 通过 ID 和间隔(为了让 foverlpas 知道要操作哪一列,有必要)
  • 运行 foverlaps 函数以识别重叠
  • 根据您的规则定义overlap变量
  • 最后,根据感兴趣的列dcast结果

关于r - 将重叠间隔的信息包含到 data.frame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382275/

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