51

显然,在我的最后一个问题中,我表现出 和 之间的data.frame混淆data.table。诚然,我没有意识到有区别。

所以我阅读了每一个的帮助,但实际上,日常用语,有什么区别,有什么含义以及每个用于帮助指导我正确使用它们的方法?

4

3 回答 3

69

虽然这是一个广泛的问题,但如果有人R对此不熟悉,可能会造成混淆,并且可能会失去区别。

所有data.table的 s 也是data.frames。粗略地说,您可以将 data.tables 视为具有额外功能的 data.frames。

data.frame是 base 的一部分R

data.table是一个扩展的包data.frames。它最显着的两个特性是速度和更简洁的语法。

但是,该语法糖与 data.frame 的标准 R 语法不同,而且未经训练的眼睛很难一目了然。因此,如果您阅读代码片段并且没有其他上下文表明您正在使用 data.tables 并尝试将代码应用于 data.frame,它可能会失败或产生意外结果。library(除了/require调用之外,您正在使用 dt 的一个明确赠品是存在:=dt 独有的赋值运算符)

话虽如此,我认为如果不体验它的缺点,很难真正欣赏它的美data.tabledata.frame。(例如,请参阅@eddi 答案的前 3 个要点)。换句话说,我非常建议data.frames先学习如何使用和操作,然后再学习data.tables。

于 2013-08-01T19:08:41.693 回答
36

我想到的日常生活中的一些差异(排名不分先后):

  • 不必data.table在表达式中一遍又一遍地指定名称(导致笨拙的语法和愚蠢的错误)(另一方面,我有时会错过名称的 TAB 补全)
  • 更快且非常直观的by操作
  • 打字后不再疯狂地按Ctrl-C df,忘记了有多大df(也导致几乎从不使用head
  • 更快更好的文件读取fread
  • 该软件包还提供了许多其他实用功能,例如%between%rbindlist使生活更美好
  • 其他一切都更快,因为许多data.frame操作不必要地复制整个事物
于 2013-08-01T19:13:55.433 回答
10

它们是相似的。数据帧是等长向量的列表,而数据表 ( data.table) 是数据帧的继承。因此数据表是数据框,但数据框不一定是数据表。编写数据表包和函数以提高索引、有序连接、分配、分组和列出列(等)的速度。

有关详细信息,请参阅http://datatable.r-forge.r-project.org/datatable-intro.pdf

于 2013-08-01T18:04:17.757 回答