对 data.table 进行子集化的最快方法是什么?

2024-05-22

在我看来,这是执行行/列子集的最快方法data.table是使用 join 和nomatch option.

它是否正确?

DT = data.table(rep(1:100, 100000), rep(1:10, 1000000))
setkey(DT, V1, V2)
system.time(DT[J(22,2), nomatch=0L])
# user  system elapsed 
# 0.00    0.00    0.01 
system.time(subset(DT, (V1==22) & (V2==2)))
# user  system elapsed 
# 0.45    0.21    0.67 

identical(DT[J(22,2), nomatch=0L],subset(DT, (V1==22) & (V2==2)))
# [1] TRUE

基于二分搜索的快速连接也有一个问题:我找不到一种方法来选择一维中的所有项目。

说如果我想随后做:

DT[J(22,2), nomatch=0]  # subset on TWO dimensions
DT[J(22,), nomatch=0]   # subset on ONE dimension only
# Error in list(22, ) : argument 2 is empty

不必将密钥重新设置为仅一维(因为我处于循环中并且我不想每次都休息密钥)。


对 a 进行子集化的最快方法是什么data.table?

使用基于二分搜索的子集功能是最快的。请注意,子集需要选项nomatch = 0L以便只返回匹配的结果。

如何仅在设置了两个键的情况下按其中一个键进行子集化?

如果您设置了两个键DT你想要subset by the 第一把钥匙,那么你可以只提供第一个值J(.),无需为第二个密钥提供任何内容。那是:

# will return all columns where the first key column matches 22
DT[J(22), nomatch=0L] 

相反,如果您想按第二把钥匙,那么您现在必须提供第一个键的所有唯一值。那是:

# will return all columns where 2nd key column matches 2
DT[J(unique(V1), 2), nomatch=0L]

这也显示在这个帖子中 https://stackoverflow.com/questions/15597685/subsetting-data-table-by-2nd-column-only-of-a-2-column-key-using-binary-search。虽然我更喜欢这样DT[J(, 2)]适用于这种情况,因为这看起来相当直观。

还有一个待处理的功能请求,用于实现辅助密钥,完成后将解决此问题。

这是一个更好的例子:

DT = data.table(c(1,2,3,4,5), c(2,3,2,3,2))
DT
#    V1 V2
# 1:  1  2
# 2:  2  3
# 3:  3  2
# 4:  4  3
# 5:  5  2
setkey(DT,V1,V2)
DT[J(unique(V1),2)]
#    V1 V2
# 1:  1  2
# 2:  2  2
# 3:  3  2
# 4:  4  2
# 5:  5  2
DT[J(unique(V1),2), nomatch=0L]
#    V1 V2
# 1:  1  2
# 2:  3  2
# 3:  5  2
DT[J(3), nomatch=0L]
#    V1 V2
# 1:  3  2

总之:

# key(DT) = c("V1", "V2")

# data.frame                        |             data.table equivalent
# =====================================================================
# subset(DF, (V1 == 3) & (V2 == 2)) |            DT[J(3,2), nomatch=0L]
# subset(DF, (V1 == 3))             |              DT[J(3), nomatch=0L]
# subset(DF, (V2 == 2))             |  DT[J(unique(V1), 2), nomatch=0L]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 data.table 进行子集化的最快方法是什么? 的相关文章

  • 在 R 中迭代多个回归模型和数据子集

    我正在尝试学习如何使用 R 中的 purrr 和 broom 包在数据集的子集上自动运行 3 个或更多回归模型 我正在使用 Nest gt mutate map gt unnest 执行此操作流淌在心中 当只有一个回归模型应用于多个数据子集
  • 删除颜色的透明度但保留颜色本身

    我想删除颜色的透明度 但保留颜色本身 例如 我喜欢绿色的透明版本 但我想要这种不透明的颜色 library scales show col green alpha green 0 3 gt nice green show col nice
  • 在 R 中粘贴向量的所有组合

    我有一个向量说 vec c A B C 我想粘贴向量中每个项目的单个组合 得到结果 AB AC BC 我知道我可以使用outer来获得向量的所有可能的组合 但我对如何只获得上面的结果感到困惑 在这种情况下 顺序并不重要 因此结果也可能是 B
  • 由于 NA,无法对数据帧进行子集化(过滤)

    为什么在 dplyr 下面的代码中filter不返回与基本 R 子集相同的 data frame 事实上 它们都没有按预期工作 我想删除观察 行 同时 b 1 AND c 1 也就是说 我只想删除第三行 require dplyr df l
  • 如何限制 viridis 色标的范围?

    我有两组数据 我想使用带有 viridis 色标的热图来呈现它们 对于第一个数据集 我的值范围从 0 到 1 2 我可以轻松看到我想要看到的差异 然而 我的第二个数据集有一些异常值 导致范围从 0 到 2 现在很难看出 0 和 1 之间有趣
  • 如何在 R 中导入并绘制三角形网格?

    我想在 R 中绘制我的模型输出 它是格式为的三角形网格 x1 y1 z1 x2 y2 z2 x3 y3 z3 value 每行代表一个三角形 我想用以下方法绘制这些三角形value作为规模 mymesh lt structure c 0 9
  • 输出到文件时光栅图的分辨率较差

    我有一个相当高清晰度的全球地图栅格 想要绘制到文件 但似乎无法保持分辨率 绘制受限区域效果很好 但无论我使用什么方法 整个世界总是以降低的分辨率告终 我在这里错过了什么吗 我以前经常输出高分辨率栅格而没有出现此问题 但在这种情况下我无法确定
  • 如何在 RSM (R) 中填充轮廓颜色并写入轴名称

    我有以下数据 ct lt structure list Conc c 50L 100L 150L 50L 100L 150L 50L 100L 150L 100L 100L 100L kGy c 10L 10L 10L 15L 15L 15
  • 如何替换异常值?

    我有以下数据框 d lt data frame Open rnorm 10 5 1 如果我插入异常值 d Open 4 100 d Open 5 100 现在我想用正常值替换这些异常值 我尝试用以前的值替换它 但如果逐个出现异常值 则它不起
  • 将数据框中的字符向量与另一个字符向量进行匹配并修剪字符

    这是一个数据框和一个向量 df1 lt tibble var1 c abcd efgh ijkl qrst vec lt c abcd mnop ijkl 现在 对于 var1 中与 vec 中的值匹配的所有值 仅保留 var1 中的前 3
  • 计算一列中正数和负数的数量

    我想计算数据帧的一列中正值和负值的数量 我在 R 中该怎么做 例如 这里是数据框 logFC logCPM LR PValue FDR Bra15066 5 630822 5 184586 73 79927 8 647868e 18 4 0
  • LaTex 中与 knit 和 xtable 交叉引用的问题

    我目前正在与 R Studio 合作 使用 LaTex 中的 R knitr 生成 PDF 文档 在这些文档中 我想在文本中引用的表格中展示我的部分结果 我使用 R 中的 xtable 包生成这些表 它运行良好并为我提供了正确的表 到目前为
  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • 将循环转换为并行计算的函数

    我正在使用 R 编程语言 我遇到这个问题 我试图找出两个 shapefile 之间的成对交集 即第一个 shapefile 中的每个多边形与第二个 shapefile 中的所有多边形相交的百分比 我想我找到了解决这个问题的基本方法 Load
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • R 中具有稳健回归的异常值

    我正在使用lmrobR 中的函数使用robustbase用于稳健回归的库 我会把它用作 rob reg lt lmrob y 0 dat method MM control a1 当我想返回我使用的摘要时summary rob reg 稳健
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this

随机推荐

  • 由于iOS6中恢复了谷歌地图,MKMapView会在iOS6中自动使用谷歌地图吗?

    由于苹果已经在iOS6中恢复了谷歌地图 如果我使用MKMapView在我的 iPhone 应用程序中 它会自动使用谷歌地图吗 如果您想在应用程序中使用 Google 地图 则应使用适用于 iOS 的 Google 地图 SDK https
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 无法将中间件与 Firebase 和 NuxtJS 3 一起使用

    我正在尝试在示例项目中使用 Firebase 身份验证 身份验证按预期工作 但是一旦我想使用中间件来阻止用户访问管理页面或在已经登录的情况下访问登录页面 这是不可能的 我已经尝试了几个小时 但没有任何效果 这是我的package json
  • UITableView行高不变

    我创建了一个自定义单元格 我有一系列字典 对于我需要创建的字典值UILables 每个单元可能包含不同数量的UILabels 所以按照我的习惯UITableViewCell类我就是这样做的 void generateCell BOOL is
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • Groupby Sum 忽略几列

    在此数据框中 我想按 位置 进行分组并获得 分数 的总和 但我不希望 纬度 经度 和 年份 在此过程中受到影响 sample pd DataFrame Location A B C A B C Year 2001 2002 2003 200
  • 是否可以访问可执行 JAR 之外的 SQLite 数据库文件?

    我有一个作为可执行 JAR 文件部署的应用程序 最初 这个 JAR 文件将与 MySQL 数据库通信 但最近我决定改用 SQLite 然而 在测试时我发现从 JAR 文件运行应用程序时无法访问 SQLite 数据库文件 我使用来自以下网站的
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • 为什么要为字符变化类型指定长度

    参考 Postgres 文档字符类型 http www postgresql org docs current static datatype character html 我不清楚指定字符变化 varchar 类型的长度 假设 字符串的长
  • 如何使用 MPMusicPlayerController 播放音乐?

    任何人都可以建议我如何在我的应用程序中使用 MPMusicPlayerController 播放音乐 任何人的帮助将不胜感激 谢谢你 莫尼什 创建一个MPMediaPickerController这样你就可以从 iPod 中选择一些音乐 然
  • 在 Spring Boot 异常处理期间保留自定义 MDC 属性

    简短版本 有足够的细节 如何保留添加在MDC中的属性doFilter 的方法javax servlet Filter执行 public void doFilter ServletRequest request ServletResponse
  • .net 运行时 - Silverlight 运行时 =?

    我用 google 搜索了一下 但没能找到 net CLR 中的哪些类未包含在 CoreCLR 又名 Silverlight 中的详细列表 Windows net Framework 中缺少什么 Silverlight 另外 是否存在 Si
  • 通过递归扩展 Prolog 目标?

    我 最终 实现了一些目标 这些目标将根据开始由 开始之后 and duration 然而 计划目标仅接受规定数量的任务 我想扩展计划目标的功能以接受单个列表并在计划时迭代该列表 不幸的是 我认为这将需要与can run and 冲突目标如下
  • iOS设备和iPhone模拟器内存​​组织的差异

    我正在尝试使用 Xcode 4 3 3 和 iPhone 5 1 模拟器开发一个应用程序 当我在模拟器上运行这个应用程序时 我没有收到任何警告 并且它运行得很好 但是 当我尝试在 iOS 设备上执行此操作时 我收到一条警告消息 收到内存警告
  • ES6 Promises/在满足多个 Promise 后调用函数(不能使用 Promises.all)[重复]

    这个问题在这里已经有答案了 我正在编写 Javascript 它需要这些事件按以下顺序发生 同时触发多个 API 调用 所有调用完成且响应返回后 执行一行代码 听起来很简单 但棘手的部分是我不能使用 Promises all 因为我仍然希望
  • 未捕获的类型错误:未定义不是函数

    我收到消息Uncaught TypeError Undefined is not a function当我尝试调用家庭控制器中的方法时 也许关于我为什么收到此消息的建议 findIdpActivities function pernr ca
  • 对 data.table 进行子集化的最快方法是什么?

    在我看来 这是执行行 列子集的最快方法data table是使用 join 和nomatch option 它是否正确 DT data table rep 1 100 100000 rep 1 10 1000000 setkey DT V1