【问题标题】:Checking whether any two data frames in the global environment are identical检查全局环境中的任意两个数据框是否相同
【发布时间】:2019-01-24 04:43:51
【问题描述】:

有没有办法检查全局环境中的任何数据帧是否彼此相同?

换句话说,假设我刚刚将几个(比如几十个)文件作为数据框导入到 R 中,其中一些文件可能是同一个文件的重复文件,但已被赋予不同的名称。有没有一种简单的方法来检查这是否属实,如果是,哪些是相同的数据帧?我知道我可以使用

检查给定的一对数据帧是否相同
identical (df1, df2)

...但是有没有一种方法可以在不为每个可能的对都这样做的情况下找到重复项?

【问题讨论】:

  • 按定义排序,建立这一点需要检查所有可能的对。唯一的问题是您是“手动”执行此操作还是编写一个为您执行此操作的函数。
  • 您可以通过进行一些预筛选来加快速度:例如,仅比较具有相同 dim 值的对象
  • 您还可以预先筛选列名/类型、行名等。vetr 包的alike 函数对此很有用,我认为htmlpreview.github.io/?https://github.com/brodieG/vetr/blob/…

标签: r


【解决方案1】:

也许可以将这一层提升并同时进行所有比较,但您可以通过这种方式将多个对象与单个对象进行比较:

data(mtcars)
mtcars1 <- mtcars
mtcars2 <- mtcars
mtcarsHead <- head(mtcars)
Vectorize(identical, "x")(list(mtcars, mtcars1, mtcars2, mtcarsHead), mtcars)

真真真假

【讨论】:

  • 这很酷,谢谢!但是我仍然想知道是否有任何方法可以做到这一点,而不需要为每个数据帧单独一行代码。
  • 虽然我确信有一种更快的方法可以大规模执行此操作,但您始终可以执行 for 循环:for(i in 1:length(listofdataframes)) { print(Vectorize(identical, " x")(listofdataframes, listofdataframes[[i]])) }
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2016-03-10
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多