【问题标题】:What makes these two R data frames not identical?是什么让这两个 R 数据帧不相同?
【发布时间】:2010-04-22 00:53:54
【问题描述】:

我有两个小数据框,this_txlast_tx。在我能说的每一个方面,它们都是完全相同的。 this_tx == last_tx 产生一个尺寸相同的框架,全部为TRUEthis_tx %in% last_tx,两个TRUEs。目测,明显一模一样。但是当我打电话时

identical(this_tx, last_tx)

我收到了FALSE。有趣的是,甚至

identical(str(this_tx), str(last_tx))

将返回TRUE。如果我设置this_tx <- last_tx,我会得到一个TRUE

发生了什么事?我对 R 的内部机制没有最深入的了解,但我找不到两个数据帧之间的单一区别。如果相关,帧中的两个变量都是因素 - 相同的级别,级别的相同数字编码,都只是相同原始数据帧的子集。将它们转换为字符向量没有帮助。

背景(因为我也不介意在这方面提供帮助):我有给予患者药物治疗的记录。每个治疗记录基本上都指定了一个人和一个日期。第二个表记录了在特定治疗期间给予的每种药物和剂量(通常,每次治疗给予几种药物)。我正在尝试确定此人以相同剂量服用相同药物组合的连续时期。

我想出的最佳计划是按时间顺序检查治疗。如果治疗[i]的药物和剂量组合与治疗[i-1]的组合相同,则治疗[i]与治疗[i-1]处于同一阶段。当然,如果我不能比较药物/剂量组合,那就对了。

【问题讨论】:

  • 如果您可以发布一对示例数据帧,这将有所帮助 - 最好是在帧上运行 dput() 的结果。
  • Sharpie 获胜。这两个数据框仍然带有母数据框的 row.names,它显示在 dput() 中,但没有显示在 str() 中。 Sharpie,如果您作为答案发布,我会标记为最佳。
  • 我真的很惊讶——我一直认为strdput 的“美化”版本。猜猜原来这只是一个总结。

标签: r dataframe comparison


【解决方案1】:

通常,在这种情况下,尝试all.equal 会很有用,它会为您提供一些关于为什么两个对象不等价的信息。

【讨论】:

  • 我确实尝试过这个并得到了一个相当神秘的"Attributes: < Component 2: Mean relative difference: 0.01158301 >",这就是导致我 str() 数据帧的原因 - 但是“属性:组件 2”并没有真正引导我进入该行数字。
【解决方案2】:

好吧,“请详细说明一下!”在这种情况下可能会赢:

检查dput() 的输出并在可能的情况下发布。 str() 只是总结了一个对象的内容,而dput() 以一种可以复制并粘贴到另一个 R 解释器以重新生成对象的形式转储所有血淋淋的细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多