order() 的结果应用于 data.frame 与 data.table 时有所不同

2023-12-01

如果我使用,我会得到不同的结果order() in data.frame and data.table。例如:

A <- data.frame(one = c("k"), two = c("3_28","31_60","48_68"))
B <- as.data.table(A)

A[order(A$one,A$two), ]
#   one   two
# 1   k  3_28
# 2   k 31_60
# 3   k 48_68


B[order(B$one, B$two), ]
#    one   two
# 1:   k 31_60
# 2:   k  3_28
# 3:   k 48_68

我必须承认这有点令人震惊,因为我假设了相同的结果order() from data.frame and data.table很多年了。我想我需要检查很多代码!

有什么办法可以保证order()给出相同的结果data.frame and data.table?

如果这种行为差异已经众所周知,并且这只是我无知的一个例子,我深表歉意。


当在内部使用时data.table手术,order(..) uses data.table:::forder。根据数据表简介小插图:

order()是内部优化的

  • 我们可以使用“-”character框架内的柱子data.table以降序排序。

  • 此外,order(...)在一个框架内data.table uses data.table的内部快速基数阶forder()。与 R 相比,这种类型提供了令人信服的改进base::orderR项目采用了data.table算法作为 2016 年 R 3.3.0 的默认排序,请参阅?sort以及 R 发布新闻。

From R 新闻、R 3.3.0 的变化、新功能:

data.table 的基数排序算法和实现 (forder) 替换了之前的基数(计数)排序并添加了 新方法order()。由马特·道尔和阿伦贡献 Srinivasan,新算法支持逻辑、整数(甚至 具有较大值)、实向量和字符向量。它的表现优于 所有其他方法,但有一些警告(请参阅?sort).

看到差异的关键是data.table:::forder使用“快速基数顺序”。如果你看?base::order,不过,它有一个论点method=:

使用的方法:允许部分匹配。默认("auto") 暗示"radix"适用于数值向量、整数向量、逻辑向量和元素少于 2^31 的因子。否则,就意味着"shell"。详细方法"shell", "quick", and "radix",请参阅帮助sort.

从你的第二栏开始data.table不是其中之一numeric, integer, logical, or factor, then base::order使用"shell"排序方法,会产生不同的结果。

然而,如果我们强迫base::order to use method="radix",我们得到相同的结果。

order(A$two)
# [1] 1 2 3
order(A$two, method="radix")
# [1] 2 1 3

A[order(A$one, A$two, method = "radix"),]
#   one   two
# 2   k 31_60
# 1   k  3_28
# 3   k 48_68

您可以通过使用影响相同的排序base::order:

B[base::order(B$one,B$two),]
#       one    two
#    <char> <char>
# 1:      k   3_28
# 2:      k  31_60
# 3:      k  48_68

添加注释:全部method=选项base::order取决于语言环境,除了method="radix",然后模仿data.table::order接近一点了。从?base::order:

除“radix”方法外,字符向量的排序顺序 将取决于所使用的语言环境的整理顺序...

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

order() 的结果应用于 data.frame 与 data.table 时有所不同 的相关文章

  • R中的不定积分

    我正在计算方程的不定积分 我将加速度计的数据通过可视化 C 程序输入到 R 中 然后就可以很简单地得出一个方程来表示加速度曲线 这一切都很好 但是我还需要计算撞击速度 根据我在高中时代的理解 我的加速度曲线的不定积分将产生速度方程 我知道执
  • Openxlsx 多次验证损坏输出文件

    我正在尝试添加多个验证并将公式添加到 Excel 文件 这是我使用的代码 library openxlsx fileTemplate lt New01 xlsx wbTemplate lt loadWorkbook fileTemplate
  • 选择一个单元格内的最小值或最大值(分隔字符串)

    我有一个数据框 其中每个样本的列可以有多个值 例如 Gene Pvalue1 Pvalue2 Pvalue3 Beta Ace 0 0381 0 00357 0 01755 0 001385 0 0037 NA 0 039 0 03 1 1
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • 绘制具有数据子集的图层时,因子水平的顺序会发生变化

    我试图控制图例中项目的顺序ggplot2我查找了其他一些类似的问题 并发现了如何更改我正在绘制的因子变量的水平顺序 我正在绘制 12 月 1 月 7 月和 6 月 4 个月的数据 如果我只对所有月份执行一个绘图命令 它会按预期工作 图例中排
  • Rstudio 命令历史记录

    这些天我经常使用 Rstudio 但最近注意到我的命令不再存储在历史记录中 我不知道这是从什么时候开始的 但可能是在安装最新版本时发生的 关于问题可能是什么的任何想法吗 Thanks 这是我们在 v0 93 73 中引入并在 v0 93 7
  • R:为什么 kable 不在 for 循环内打印?

    我正在使用 rmarkdown 和 Latex 编写报告 我需要使用打印一组表格knitr kable 但在 for 循环内时不会打印 这是我的代码 title project title author Mr Author date 201
  • S4 类 [(子集)带有附加参数的继承

    这是一个扩展在 R 中的访问器函数中使用 callNextMethod https stackoverflow com q 24875284 2752888 2017 03 25 更新 为了说明如何仅在加载方法时失败 但在构建的包中时不会失
  • 列槽不足

    当尝试为 data table 中的每个变量 108 个变量 创建 12 个滞后时 我收到一条错误 指出列槽不足 此操作应创建大约 1200 个变量或列 Data A as data table Datos A Varnames names
  • 获取 pandas 中最后一次出现特定值之后的所有行

    我的数据框看起来像 ID colA 1 B 1 D 2 B 2 D 2 C 我已返回每组中事件 B 最后一次出现后的所有行 输出将是 ID colA 1 D 2 D 2 C 我试过 a df colA str contains B grou
  • 在 R 中使用 spplot 将多个绘图放在一个页面上?

    我知道如何在使用简单函数图时绘制两个图 old par lt par mfrow c 1 2 plot faithful main Faithful eruptions plot large islands main Islands yla
  • 再现频率矩阵图

    我想在 R 中重新创建一个情节 情节如下 来源 Boring E G 1941 作为动态平衡的统计频率 心理学评论 48 4 279 这略高于我的工资等级 能力 因此在这里询问 无聊的状态 第一次 A 只能出现 从不 0 或 总是 1 在
  • R Data.Table 创建带有条件的变量

    我需要在下面的数据集中创建一个新变量 A X a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 The newvar如果X等于 2 5 7 或 9 否则 newvar应该是 0 Code dt1 lt dat
  • 在 R 中按组检查重叠开始和结束时间

    我想检查数据的重叠 这是数据 ID lt c rep 1 3 rep 3 5 rep 4 4 rep 5 5 Begin lt c 0 2 5 3 7 8 7 25 25 10 15 17 20 1 NA 10 11 13 End lt c
  • 循环中的knitr模板和子文档

    圣诞节前我之前问过跨多个 knitr 文档的单一样式表 https stackoverflow com questions 20370584 single style sheet across multiple knitr document
  • 确定向量中是否存在元素的最有效方法

    我有几种算法取决于确定元素是否存在于向量中的效率 在我看来 这 in 这相当于is element 应该是最有效的 因为它只返回一个布尔值 在测试了几种方法之后 令我惊讶的是 这些方法是迄今为止效率最低的 以下是我的分析 随着向量大小的增加
  • R 中的转换会导致文档错误

    每当我运行此代码时 tm map 行都会给我警告消息 警告信息 在 tm map SimpleCorpus docs toSpace 中 转换删除文档 texts lt read csv Data fast food Domino s Do
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • 优化 R 中的嵌套 for 循环

    我尝试加速下面的代码 但没有成功 我读到Rfast https cran r project org web packages Rfast Rfast pdf包 但我也未能实现该包 有没有办法优化R中的以下代码 RI lt function
  • 按偶数和奇数排序

    我想知道是否可以使用 std sort 函数按偶数或奇数对数字进行排序 我有以下代码 但我不确定如何在 std sort 中实现 inline bool isEven const Point n return n getX 2 0 它是否正

随机推荐

  • gfortran 将 c 库与 conda 连接

    我正在尝试在 Ubuntu 18 04 服务器上使用 conda 编译 C Fortran 程序 但我没有超级用户权限 我能够在我的 Ubuntu 18 04 PC 上使用相同的源代码正确编译程序 也使用 conda 但在服务器上我收到一堆
  • swagger ui 中的隐藏字段

    我正在使用 swagger UI 2 0 23 版本 并使用 json 文件提供 api 我需要使用 swagger ui 将特定标头值发送到我的 api 但该字段不应在 ui 中可见 因为该值不应该被更改 因此 如何隐藏该字段以使其不显示
  • 正则表达式 - 在每个单词之前/之后添加一个字符

    Using 记事本 and replace函数 我尝试添加一个符号 or 在我列表中的每个单词之前 列表示例 blue car 红色汽车大 红色小车 绿色汽车大 绿色小车 我正在寻找以下结果 蓝色 汽车 红色 汽车 小 红色 汽车 大 et
  • PHP 的 MCRYPT_RIJNDAEL_256 CBC 的 Python 等效项

    我需要这个函数的 Python 实现 我想在 appengine 上使用它 我不太擅长Python 所以请帮忙 function encrypt data return base64 encode mcrypt encrypt MCRYPT
  • 如何通过改变CSS来实现这样的滚动div?

    This site左侧有一个滚动 div 当您滚动页面时 div 也会有节奏地滚动 并且图像的颜色也会发生变化 position fixed还不是全部都能做到 那什么是技术呢 EDIT position fixed我可以用它来将 div 固
  • 为什么 Spring Security 中永远不会触发事件 AbstractAuthenticationFailureEvent ?

    我使用 spring 4 0 2 RELEASE 和 spring security 3 2 5 RELEASE 我使用它是因为当我开始我的项目 spring security 4 0 0 时它位于快照中 我尝试过 spring 4 2 0
  • 如何按空格分割字符串

    我需要用空格分割字符串 为此我尝试过 str Hello I m your String String splited str split 但这似乎不起作用 你所拥有的应该有效 但是 如果提供的空间默认为 其他内容 您可以使用空白正则表达式
  • R:4D 绘图、x、y、z、颜色

    你能给我一个关于如何使用 rgl 在 x y 和 z 轴上绘制 3 个变量以及使用不同颜色绘制第四个变量的示例吗 thanks 您使用以下组合persp和颜色根据单独的功能 这是一些示例代码 Create a simple surface
  • Java 桌面应用程序的内存分析

    我的应用程序加载了大约的数据集 每次 85bm 至 100mb 应用程序的内存限制设置为 512mb 理论上来说 这已经足够了 然而 我发现 如果在应用程序的单次运行中 我打开和关闭数据集 5 次 总内存消耗会稳步增加 直到出现内存不足错误
  • 保存登录详细信息(首选项)android

    我有一个带有登录 注销功能的Android应用程序 登录表单包含用户名和密码以及登录按钮 我想在用户选中 记住我 复选框时保存用户名和密码 我的project java文件如下所示 public class project extends
  • REACT- DOM 突变警告含义

    违规 向 DOMNodeInserted 事件添加了同步 DOM 突变侦听器 考虑使用 MutationObserver 来使页面响应更快 关于此警告还有另一个问题 我已经在那里回答了解决该问题的方法 这不是这个问题的原因 对于那些想知道的
  • 如何与我的应用程序共享选定的文本?

    我想让我的应用程序出现在 UIActivityViewController 中以进行文本共享 例如邮件 iMessage Notes Gmail 等 例如 当用户点击所选文本并从任何应用程序中点击 共享 按钮 如附件中所示 时 我希望我的应
  • 占位符混合 SCSS/CSS

    我正在尝试为 sass 中的占位符创建一个混合 这是我创建的 mixin mixin placeholder css webkit input placeholder css moz placeholder css moz placehol
  • REGEX 查找特定子字符串(如果不是单词的一部分)

    我在简化我创建的正则表达式时遇到了麻烦 sept a zA Z sept a zA Z a zA Z sept sept a zA Z 该正则表达式必须找到子字符串sept 这不是任何单词的一部分 例如 september 当应该找到单词时
  • 如何在 Python 中将数组数组转换为多维数组?

    我有一个 NumPy 数组 长度为 X 所有数组都具有相同的长度 Y 但其类型为 对象 因此具有维度 X 我想将其 转换 为具有成员数组元素类型 float 的维度 X Y 数组 我能看到做到这一点的唯一方法是 手动 使用类似的东西 x f
  • 气氛/泽西岛双向对话

    我见过许多 Atmosphere 示例 包括 pub sub 我想做类似 pub sub 的事情 客户端订阅该客户端唯一的通道 服务器定期发布到该通道 只不过客户端也会将数据发送到服务器 客户端将发送数据以响应服务器发送的数据 以及在其他情
  • 如何以编程方式从 Android 中的 .vcf 文件导入或插入联系人?

    我创造 vcf使用以下代码保存 Android 中所有联系人的文件 public static void getVCF final String vfile POContactsRestore vcf Cursor phones mCont
  • Tomcat SSL:无法找到请求目标的有效证书路径

    我正在尝试访问应用程序中的网址 但收到此错误 1771426 http bio 8180 exec 15 ERROR gadget GadgetValidatorServlet wsdl exception WSInvokerExcepti
  • 禁用自动更正 UITextView

    有谁知道如何禁用 uitextview 中的自动更正编程 我有以下代码 但它不起作用 void setUpTextView self textView UITextView alloc initWithFrame self bounds s
  • order() 的结果应用于 data.frame 与 data.table 时有所不同

    如果我使用 我会得到不同的结果order in data frame and data table 例如 A lt data frame one c k two c 3 28 31 60 48 68 B lt as data table A