问题标签 [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.
r - 用最新的非 NA 值替换 NA
在data.frame
(或data.table
)中,我想用最接近的先前非 NA 值“填充” NA。一个简单的例子,使用向量(而不是 a data.frame
)如下:
我想要一个fill.NAs()
允许我构造yy
这样的函数:
我需要对许多(总共约 1 Tb)小型data.frame
s(约 30-50 Mb)重复此操作,其中一行是 NA 是它的所有条目。解决问题的好方法是什么?
我制作的丑陋解决方案使用此功能:
该函数fill.NAs
的使用如下:
输出
...这似乎工作。但是,伙计,它丑吗!有什么建议么?
performance - 为什么在数据帧上运行“唯一”比在 R 中的矩阵更快?
我已经开始相信数据框与矩阵相比没有优势,除了符号方便。但是,在矩阵和数据帧上运行时,我注意到了这种奇怪unique
:它似乎在数据帧上运行得更快。
随着行数的增加,时序结果的差异甚至更大。所以,这个问题有两个部分。
为什么这对于矩阵来说更慢?
unique
转换为数据框,运行,然后转换回来 似乎更快。有什么理由不只是换
unique
行myUnique
,第 1 部分中的转换是什么?
注意 1. 鉴于矩阵是原子的,似乎unique
矩阵应该更快,而不是更慢。能够迭代固定大小的连续内存块通常应该比运行单独的链表块更快(我假设这就是数据帧的实现方式......)。
注意 2. 正如 的性能所证明的那样,在数据帧或矩阵上data.table
运行unique
是一个相对糟糕的主意 - 请参阅 Matthew Dowle 的答案和相对时间的评论。我已经将很多对象迁移到数据表中,而这种性能是这样做的另一个原因。因此,尽管应该很好地为用户提供采用数据表的服务,但出于教学/社区的原因,我将暂时保留这个问题,即为什么矩阵对象需要更长的时间。下面的答案解决了时间都去哪儿了,以及我们如何才能获得更好的性能(即数据表)。答案近在咫尺- 代码可以通过unique.data.frame
和unique.matrix
. :) 对它在做什么的英文解释以及为什么缺少这一切。
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)
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
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)。
r - 对 data.table 进行高效的逐行操作
我需要找到许多(+60)相对较大(~ 250,000 x 3)的行最小值data.frame
(或者我可以等效地工作xts
)。
数据框my.df
看起来像这样
我试过
在我的系统上,这需要大约 400 秒。它有效,但我不相信这是最好的使用方式data.table
。我使用data.table
正确吗?有没有更有效的方法来进行简单的逐行操作?
r - 毫秒时间戳作为 data.table 中的键
在这个问题中,讨论了在 s 中使用日期data.table
的问题。一个解决方案是使用时间和日期的内置类。这些工作的精度高达秒。是否有解决方法来处理索引列中的毫秒数?
r - 如何根据 R 中的向量从 data.frame 中提取值?
假设我有一个数字向量,例如:
和data.frame:
我想提取 df$key 中具有相同值等于 x 的所有行,结果如下:
请问有没有有效的方法来做到这一点?我试过data.frame、hash包和data.table,都没有成功。感谢帮助!
多谢你们。我实际上尝试了类似的事情,但 df$key 和 x 颠倒了。是否可以使用hash()函数(在“hash”包中)来做到这一点?我看到哈希可以做这样的事情:
但似乎它的钥匙链中没有数组,例如:
但我只需要向量而不是散列中的值。否则,这将是完美的,这样我们就可以通过使用一些“真正的”哈希概念来摆脱 data.frame 。