问题标签 [data.table]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
19 回答
116984 浏览

r - 用最新的非 NA 值替换 NA

data.frame(或data.table)中,我想用最接近的先前非 NA 值“填充” NA。一个简单的例子,使用向量(而不是 a data.frame)如下:

我想要一个fill.NAs()允许我构造yy这样的函数:

我需要对许多(总共约 1 Tb)小型data.frames(约 30-50 Mb)重复此操作,其中一行是 NA 是它的所有条目。解决问题的好方法是什么?

我制作的丑陋解决方案使用此功能:

该函数fill.NAs的使用如下:

输出

...这似乎工作。但是,伙计,它丑吗!有什么建议么?

0 投票
1 回答
1318 浏览

r - 掩盖冲突

加载.csvwith 时sqldf,一切正常,直到我加载data.table. 例如:

工作,而

没有。加载时,data.table通知您

所以,我试过这个

哪个有效。在我用这个技巧乱扔所有代码之前:

处理 R 中的屏蔽冲突的最佳实践解决方案是什么?

编辑:这里有一个密切相关的线程,但没有建议通用的解决方案。

0 投票
3 回答
2825 浏览

performance - 为什么在数据帧上运行“唯一”比在 R 中的矩阵更快?

我已经开始相信数据框与矩阵相比没有优势,除了符号方便。但是,在矩阵和数据帧上运行时,我注意到了这种奇怪unique:它似乎在数据帧上运行得更快。

随着行数的增加,时序结果的差异甚至更大。所以,这个问题有两个部分。

  1. 为什么这对于矩阵来说更慢?unique转换为数据框,运行,然后转换回来 似乎更快。

  2. 有什么理由不只是换uniquemyUnique,第 1 部分中的转换是什么?


注意 1. 鉴于矩阵是原子的,似乎unique矩阵应该更快,而不是更慢。能够迭代固定大小的连续内存块通常应该比运行单独的链表块更快(我假设这就是数据帧的实现方式......)。

注意 2. 正如 的性能所证明的那样,在数据帧或矩阵上data.table运行unique是一个相对糟糕的主意 - 请参阅 Matthew Dowle 的答案和相对时间的评论。我已经将很多对象迁移到数据表中,而这种性能是这样做的另一个原因。因此,尽管应该很好地为用户提供采用数据表的服务,但出于教学/社区的原因,我将暂时保留这个问题,即为什么矩阵对象需要更长的时间。下面的答案解决了时间都去哪儿了,以及我们如何才能获得更好的性能(即数据表)。答案近在咫尺- 代码可以通过unique.data.frameunique.matrix. :) 对它在做什么的英文解释以及为什么缺少这一切。

0 投票
9 回答
126829 浏览

r - 转换 data.table 中的列类

我在使用 data.table 时遇到问题:如何转换列类?这是一个简单的示例:使用 data.frame 转换它没有问题,使用 data.table 我只是不知道如何:

我在这里错过了一些明显的东西吗?

由于 Matthew 的帖子而更新:我以前使用过旧版本,但即使在更新到 1.6.6(我现在使用的版本)之后,我仍然会收到错误消息。

更新 2:假设我想将类“因子”的每一列转换为“字符”列,但事先不知道哪一列属于哪个类。使用 data.frame,我可以执行以下操作:

我可以对 data.table 做类似的事情吗?

更新 3:

sessionInfo() R 版本 2.13.1 (2011-07-08) 平台:x86_64-pc-mingw32/x64 (64-bit)

0 投票
1 回答
979 浏览

r - 将集合操作从 R 的数据帧移植到数据表:如何识别重复行?

[更新 1:正如 Matthew Dowle 所指出的,我data.table在 R-Forge 上使用的是 1.6.7 版本,而不是 CRAN。您不会看到与早期版本相同的行为data.table。]

作为背景:我正在移植一些小实用函数来对数据框的行或数据框对(即每一行是集合中的一个元素)进行集合操作,例如唯一的 - 从列表、联合创建集合,交集,集差等。这些模仿 Matlab 的intersect(...,'rows'),setdiff(...,'rows')等,它们似乎在 R 中没有对应物(R 的集合操作仅限于向量和列表,但不限于矩阵行或数据帧)。这些小功能的示例如下。如果数据框的这个功能已经存在于某些包或基础 R 中,我愿意接受建议。

我一直在将这些迁移到数据表中,当前方法中的一个必要步骤是查找重复的行。执行时duplicated()返回错误,说明数据表必须有键。这是一个不幸的障碍——除了设置键,这不是一个通用的解决方案并增加了计算成本,还有其他方法可以找到重复的对象吗?

这是一个可重现的示例:

产生此错误消息:

尽管我用 pattern 命名了每个函数,但该代码对数据帧按原样工作dt_operation

有没有办法解决这个问题?设置键仅适用于整数,这是我不能为输入数据假设的约束。那么,也许我错过了一种使用数据表的聪明方法?


示例集合操作函数,其中集合的元素是数据行:


注意 1:这些辅助函数的一个预期用途是查找 x 中的键值不在 y 中的键值中的行。这样,我可以在计算x[y]或时找到 NA 可能出现的位置y[x]。尽管这种用法允许为z_rbind对象设置键,但我不想将自己限制在这个用例上。

注意 2:对于相关的帖子,这里有一篇关于在数据帧上运行的帖子,使用更新的包unique运行它的结果非常好。data.table这是关于在数据表上运行的早期帖子。unique

0 投票
1 回答
3230 浏览

r - data.table 中的列类有什么限制?

更新data.table此问题与1.8.0 及更高版本不再相关。从新闻文件:

现在允许在键中使用字符列,并且优先考虑因素。data.table() 和 setkey() 不再强制字符为因子。因素仍然得到支持。实现 FR#1493、FR#1224 和(部分)FR#951。

原始问题

我尝试加入两个data.tables。但是,连接的成功取决于我用来匹配 data.tables 的列的类。更准确地说,这些列似乎不应该具有类“字符”。我不太明白原因,但我确定我在这里遗漏了一些明显的东西。因此,非常感谢您的帮助。

这是一个例子:

还是不行。为什么?有什么限制?我想念什么?附加信息:我在平台:x86_64-pc-linux-gnu(64 位)上使用 data.table 1.6.6 和 R 版本 2.13.2(2011-09-30)。

0 投票
3 回答
21557 浏览

r - 对 data.table 进行高效的逐行操作

我需要找到许多(+60)相对较大(~ 250,000 x 3)的行最小值data.frame(或者我可以等效地工作xts)。

数据框my.df看起来像这样

我试过

在我的系统上,这需要大约 400 秒。它有效,但我不相信这是最好的使用方式data.table。我使用data.table正确吗?有没有更有效的方法来进行简单的逐行操作?

0 投票
2 回答
971 浏览

r - 毫秒时间戳作为 data.table 中的键

在这个问题中,讨论了在 s 中使用日期data.table的问题。一个解决方案是使用时间和日期的内置类。这些工作的精度高达秒。是否有解决方法来处理索引列中的毫秒数?

0 投票
3 回答
1911 浏览

r - 与 data.tables 的非连接

我有一个关于data.table“非连接”成语的问题,灵感来自迭代器的问题。这是一个例子:

data.tables 看起来像这样

要查找 中的哪些行dt2具有相同的键dt1,请将which选项设置为TRUE

马修在这个答案中建议,“不加入”成语

dt1将那些具有未出现在中的索引的行作为子集dt2。在我的data.tablev1.7.1 机器上,我收到一个错误:

相反,使用选项nomatch=0,“非加入”有效

这是预期的行为吗?

0 投票
2 回答
12299 浏览

r - 如何根据 R 中的向量从 data.frame 中提取值?

假设我有一个数字向量,例如:

和data.frame:

我想提取 df$key 中具有相同值等于 x 的所有行,结果如下:

请问有没有有效的方法来做到这一点?我试过data.frame、hash包和data.table,都没有成功。感谢帮助!


多谢你们。我实际上尝试了类似的事情,但 df$key 和 x 颠倒了。是否可以使用hash()函数(在“hash”包中)来做到这一点?我看到哈希可以做这样的事情:

但似乎它的钥匙链中没有数组,例如:

但我只需要向量而不是散列中的值。否则,这将是完美的,这样我们就可以通过使用一些“真正的”哈希概念来摆脱 data.frame 。