寻找一种有效的方法来计算两个表中间隔集之间的重叠数量?

2024-06-07

注意:为了方便起见,我使用上一篇文章中的示例数据集。

假设有两个数据集,ref and map。他们是:

ref <- data.table(space=rep('nI',3),t1=c(100,300,500),t2=c(150,400,600),id=letters[1:3])

map <- data.table(space=rep('nI',241),t1=seq(0,1200,by=5),t2=seq(5,1205,by=5),res=rnorm(241))

他们看着像是:

> ref
   space t1  t2   id
1:    nI 100 150  a
2:    nI 300 400  b
3:    nI 500 600  c

> map
   space   t1   t2        res
1:    nI    0    5 -0.7082922
2:    nI    5   10  1.8251041
3:    nI   10   15  0.2076552
4:    nI   15   20  0.8047347
5:    nI   20   25  2.3388920
---                           
237:    nI 1180 1185  1.0229284
238:    nI 1185 1190 -0.3657815
239:    nI 1190 1195  0.3013489
240:    nI 1195 1200  1.2947271
241:    nI 1200 1205 -1.5050221

现在,我注意到在仍在开发的 data.table 包中,该函数foverlaps将填充间隔ref与相应的行map.

setkey(ref,space,t1,t2)

foverlaps(map,ref,type="within",nomatch=0L)

这使:

   space t1  t2  id i.t1 i.t2         res
1:    nI 100 150  a  100  105 -0.85202726
2:    nI 100 150  a  105  110  0.79748876
3:    nI 100 150  a  110  115  1.49894097
4:    nI 100 150  a  115  120  0.47719957
5:    nI 100 150  a  120  125 -0.95767896
6:    nI 100 150  a  125  130 -0.51054673
7:    nI 100 150  a  130  135 -0.08478700
8:    nI 100 150  a  135  140 -0.69526566
9:    nI 100 150  a  140  145  2.14917623
10:    nI 100 150  a  145  150 -0.05348163
11:    nI 300 400  b  300  305  0.28834548
12:    nI 300 400  b  305  310  0.32449616
13:    nI 300 400  b  310  315  1.16107248
14:    nI 300 400  b  315  320  1.08550676
15:    nI 300 400  b  320  325  0.84640788
16:    nI 300 400  b  325  330 -2.15485447
17:    nI 300 400  b  330  335  1.59115714
18:    nI 300 400  b  335  340 -0.57588128
19:    nI 300 400  b  340  345  0.23957563
20:    nI 300 400  b  345  350 -0.60824259
21:    nI 300 400  b  350  355 -0.84828189
22:    nI 300 400  b  355  360 -0.43528701
23:    nI 300 400  b  360  365 -0.80026281
24:    nI 300 400  b  365  370 -0.62914234
25:    nI 300 400  b  370  375 -0.83485164
26:    nI 300 400  b  375  380  1.46922713
27:    nI 300 400  b  380  385 -0.53965310
28:    nI 300 400  b  385  390  0.98728765
29:    nI 300 400  b  390  395 -0.66328893
30:    nI 300 400  b  395  400 -0.08182384
31:    nI 500 600  c  500  505  0.72566100
32:    nI 500 600  c  505  510  2.27878366
33:    nI 500 600  c  510  515  0.72974139
34:    nI 500 600  c  515  520 -0.35358019
35:    nI 500 600  c  520  525 -1.20697646
36:    nI 500 600  c  525  530 -0.01719057
37:    nI 500 600  c  530  535  0.06686472
38:    nI 500 600  c  535  540 -0.40866088
39:    nI 500 600  c  540  545 -1.02697573
40:    nI 500 600  c  545  550  2.19822065
41:    nI 500 600  c  550  555  0.57075648
42:    nI 500 600  c  555  560 -0.52009726
43:    nI 500 600  c  560  565 -1.82999177
44:    nI 500 600  c  565  570  2.53776578
45:    nI 500 600  c  570  575  0.85626293
46:    nI 500 600  c  575  580 -0.34245708
47:    nI 500 600  c  580  585  1.21679869
48:    nI 500 600  c  585  590  1.87587020
49:    nI 500 600  c  590  595 -0.23325264
50:    nI 500 600  c  595  600  0.18845022
space  t1  t2 id i.t1 i.t2         res

要运行data.table 1.9.3的开发版本,以下代码将帮助您运行它:

install.packages("devtools")
library(devtools)
dev_mode(on=T)

install_github("Rdatatable/data.table", build_vignettes=FALSE)

dev_mode(on=F)

我正在尝试做的事情:

上面基本上列出了时间区间内包含的所有区间。但是,我试图通过以下方式创建一个新专栏ref that counts中的行数map的时间间隔内ref。因此,我想要的表是:

> ref
   space t1  t2  id  count
1:    nI 100 150  a     10
2:    nI 300 400  b     20
3:    nI 500 600  c     20

每个的计数表示有多少行map落在每个时间间隔之间ref。虽然我知道一个非常基本的解决方案是仅使用求和或计数函数进行计数,但是否有一种解决方案可以创建计数而无需首先创建更大的填充数据集?我这样说是因为我的真实数据包含超过 3 亿个观察值。任何建议都会非常有帮助!谢谢你!


您可以使用which=TRUE参数来获取重叠的位置,然后使用来获取counts通过做一个简单的聚合:

ans = foverlaps(map, ref, type="within", nomatch=0L, which=TRUE)[, .N, by=yid]
#    yid  N
# 1:   1 10
# 2:   2 20
# 3:   3 20

然后把这个放回去ref。但我们应该提供一种更直接的方法来实现这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找一种有效的方法来计算两个表中间隔集之间的重叠数量? 的相关文章

  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • 展平 ggplot2 中的 alpha 通道

    ggplot2 的某些对象 函数 支持 alpha 通道 http docs ggplot2 org current geom point html http docs ggplot2 org current geom point html
  • 数据集子集的回归

    我想做以下事情并需要一些帮助 分别计算 身高 与 年龄 的斜率和截距 lm Height Age 一 每个人 二 性别 并创建一个包含结果 斜率和截距 的表 我可以使用 申请 吗 在下一步中 我想做一个统计测试 以确定性别之间的斜率和截距是
  • R 中具有 NA 值的聚合栅格

    我在 R 中有一个分辨率为 1 公里的栅格 其 NA 值分布广泛 但位置不规则 即 包含数据的单元格不连续 并且 NA 值分散 我正在尝试使用用户定义的平均圆角函数 包括在下面 以 5 公里分辨率 因子 5 聚合此栅格 使用 raster
  • 替换为 NA

    我有一个包含条目的数据框 看来这些值没有被视为 NA 因为 is na 返回 FALSE 我想将这些值转换为 NA 但找不到方法 Use dfr dfr
  • 为 PDF 输出添加 natbib 选项

    有没有办法指定natibib输出 PDF 时的选项bookdown 我希望 tex 输出具有命令 usepackage sort compress natbib 但似乎没有任何方法可以在 YAML 中指定它 我无法将命令添加到我的序言中 因
  • 是否可以使用像“tz=NULL”这样的东西?...“as.POSIXct”默认为依赖于语言环境的时区(与“as.Date”不同),这会导致问题

    我知道这是一个长期存在 根深蒂固的问题 但这是我经常遇到的问题 而且我看到初学者R经常与此斗争 我希望有一个令人满意的解决方案 到目前为止 我的谷歌和 SO 搜索都是空的 但如果在其他地方重复 请指出正确的方向 TL DR 有没有办法使用类
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • 使用 roxygen2 记录数据集

    我正在尝试使用 roxygen2 记录 R 包中的一些数据集 仅考虑其中之一 I have mypkg data CpG human GRCh37 RDa 其中包含一个名为的对象CpG human GRCh37 和一个名为 mypkg R
  • 使用 dplyr 和 ggplot 绘制包括负值的多面水平发散堆积条形图

    我希望这个例子能够让人清楚 我想要堆叠条形 其中中间条形跨越 0 因为它代表中性值 这与李克特量表一起使用 为了重现性 我使用钻石数据集 以下示例与我的用例足够接近 并演示了我很难以正确的顺序获取 好 或 正 数据 因此中性最接近 0 这是
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本
  • 为什么 quosures 在 group_by() 中起作用,但在 filter() 中不起作用?

    我正在构建一个函数 我将根据字符串操作数据框 在该函数中 我将根据字符串构建一个列名称 并使用它来操作数据框 如下所示 library dplyr orig df lt data frame id 1 3 amt c 100 200 300
  • Rblpapi - 将 bdp 与 ISIN / Cusip 一起使用会出现错误

    当我将 bdp 与 ISIN 或 CUSIP 一起使用时 出现以下错误 bdp US25470XAB10 ISIN ULT PARENT TICKER EXCHANGE bdp 25470XAB1 CUSIP ULT PARENT TICK
  • R:使用 as.formula 修复模型中的模型调用

    我有一个gls模型 其中我将公式 来自另一个对象 分配给模型 equation lt as formula aic obj row model gt equation temp avg I year 1950 mod1 lt gls equ
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • 根据第二个数据帧中的匹配创建新列

    如果有两个数据框 top3df http dpaste com 1709875 and qw qw lt structure list id structure 1 25 Label c w01 w02 w03 w04 w05 w06 w0
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • 如何解决 R 估计中的整数溢出错误

    我正在尝试使用估计模型speedglm在 R 中 数据集很大 约 6988 万行和 38 列 行数和列数相乘得到约 27 亿 超出了整数限制 我无法提供数据 但以下示例重现了该问题 library speedglm large exampl
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38

随机推荐

  • 有没有办法在Ejabberd上用Strope实现“Message Seen”功能?

    我只是想知道是否有一个用于消息传递收据的 Strope 插件可以与 Ejabberd 一起使用 我想了解消息传递收据是如何工作的 Strope 是否有任何文档 插件 实现消息传递回执 http xmpp org extensions xep
  • 不和谐嵌入中的行分隔符/中断

    我有以下不和谐嵌入 message reply content embed color 11416728 author name xx know it all icon url https xx png description footer
  • 在 iOS 7 上需要具有非半透明栏的 WantsFullScreenLayout 行为

    我希望能够让我的视图覆盖整个屏幕 位于导航栏和工具栏后面 并将导航栏和工具栏的半透明属性设置为NO 我想要不透明的条 在 iOS 7 之前 这很容易通过设置来完成wantsFullScreenLayout是 然而 在 iOS 7 中 我找不
  • 将多对多关系与实体框架中的属性映射

    我总是使用属性将实体的属性映射到相应的列 这是一个例子 Table news entries public class News Key public int Id get set Column d date public DateTime
  • 用于 Mono 的 .NET Reflector [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Mono 是否有等效的 NET Reflector 快速谷歌搜索没有找到任何东西 或者我可以在 Mono 上运行 Reflector 例如
  • Quanteda 包,朴素贝叶斯:如何预测不同特征的测试数据?

    I used quanteda textmodel NB创建一个模型 将文本分类为两个类别之一 我将模型拟合到去年夏天的训练数据集上 现在 我今年夏天尝试使用它对我们在工作中收到的新文本进行分类 我尝试这样做并收到以下错误 Error in
  • C# usercontrol如何访问所有子控件

    我定义了一个自定义面板 里面有一个表格布局面板 但是 当我在 winform 上使用此控件时 我无法访问表布局面板属性 例如 我想在单元格中添加一列或停靠其他控件 我尝试将修饰符属性更改为public 但仍然不起作用 我该怎么做才能查看和更
  • 如何通过 HTML 表单创建 google 图片搜索的链接?

    尝试使用 HTML 表单制作 Google 图像搜索克隆 在搜索字段中输入文本后 它将直接带您进入 Google 图像搜索结果页面 这是我正在使用的代码
  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • 如何使用Bert进行长文本分类?

    我们知道 BERT 有 token 的最大长度限制 512 因此如果一篇文章的长度远大于 512 例如文本中有 10000 个 token 如何使用 BERT 您基本上有三个选择 您可以剪掉较长的文本并仅使用前 512 个令牌 最初的 BE
  • WCF 包装代理客户端

    我的项目中有许多在客户端应用程序中使用的 Web 方法 我不想写这样的代码 using ServiceClient sc new ServiceClient Invoke service methods sc Method1 相反 我想写
  • 从 NSString 中去除非字母数字字符

    我正在寻找一种快速简便的方法来从文本中删除非字母数字字符NSString 可能使用的东西NSCharacterSet 但我累了 似乎没有什么返回只包含字符串中字母数字字符的字符串 我们可以通过拆分然后合并来做到这一点 组件Separated
  • Android Marshmallow 应用程序中位置的权限问题

    我正在学习开发一个 Android 应用程序 用于按照 Google 开发者论坛获取设备位置 http developer android com training location retrieve current html last k
  • 如何使用PIL将灰度图转为伪彩色?

    我似乎不知道如何获取我的灰度函数并将其更改为给我假颜色 我知道我需要将每种颜色 R G B 分成范围 然后根据每种颜色的范围分配颜色 有谁知道这是如何运作的 def grayscale pic width height pic size f
  • 没有名为“torch”或“torch.C”的模块

    希望得到像我 5 这样的解释 因为我已经检查了所有相关答案 但没有一个有帮助 我已经安装了Python 我已经安装了Pycharm 我已经安装了Anaconda 我已经安装了 Microsoft Visual Studio 我有not安装了
  • 如何在不启动 Jupyter Notebook 服务器的情况下使用 .ipynb 文件?

    我开始更多地使用 Jupyter 笔记本 并且真的开始喜欢它 但是 我发现很难在我的特定设置中使用它 我有一个工作站来运行所有笔记本电脑 但一天中的大部分时间我都在使用空间有限且没有电源插座的笔记本电脑 我希望能够编辑 但不能运行 这些笔记
  • Laravel 5.2 中使用多个 MySQL 数据库连接查询关系存在

    我正在处理以下情况 我有两个模型 一个Employee with id and name字段和一个Telephone with id employee id and flag字段 还有一个一对多关系在这两种模型之间 即一个员工可能拥有多部电
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • Settings.settings 中允许为 Null 的 int 类型吗?

    我有一个属性 我想输入为int 在我的 Settings settings 文件中 当我使用int 我遇到运行时失败 System NullReferenceException 未将对象引用设置为对象的实例 我可以使用字符串类型作为解决方法
  • 寻找一种有效的方法来计算两个表中间隔集之间的重叠数量?

    注意 为了方便起见 我使用上一篇文章中的示例数据集 假设有两个数据集 ref and map 他们是 ref lt data table space rep nI 3 t1 c 100 300 500 t2 c 150 400 600 id