问题标签 [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 投票
3 回答
72236 浏览

r - .SD 在 R 中的 data.table 中代表什么

.SD看起来很有用,但我真的不知道我在用它做什么。它代表什么?为什么会有前一段(句号)。当我使用它时会发生什么?

我读到: .SD是一个data.table包含x每个组的数据子集,不包括组列。可用于分组i时、分组时by、键控by和 _ad hoc_by

这是否意味着女儿data.tables 被保存在内存中以供下一次操作使用?

0 投票
2 回答
35667 浏览

r - 如何在 R 中的 data.table 中按两个条件选择行

假设我有一个 data.table,我想选择变量 x 的值为 b 的所有行。这很容易

顺便说一句,似乎必须设置一个键,如果该键未设置为 x 则这不起作用。顺便说一句,如果我将两列设置为键会发生什么?

无论如何,继续前进,假设我想选择变量 x 为 a 或 b 的所有行

不工作

但以下工作

但这使用矢量扫描 la 数据帧。它不使用二进制搜索。我猜对于较小的数据集,这无关紧要。

这是我应该做的还是我对 data.table 语法一无所知?

还有一件事情。是否有使用 data.table 的更复杂的布尔多变量选择(或子集)过程的示例?

我知道我总是可以恢复使用 subset() 函数,因为如果必须,data.table 将表现为 data.frame。

0 投票
1 回答
3451 浏览

r - 大合并/内存管理

我试图合并一个大文件和一个小文件时碰壁了。我已经阅读 了许多其他关于 R 中内存管理的帖子,但还没有找到解决它的非极端方法(转到 64 位、上传到集群等)。我对 bigmemory 包进行了一些尝试,但找不到解决方案。在我沮丧地举起双手之前,我想我会在这里尝试一下。

我正在运行的代码如下所示:

我想我在问有没有不涉及购买新硬件的聪明方法?

  1. 我需要能够merge创建一个更大的对象。
  2. 然后我需要对那个更大的对象进行回归等。

我应该放弃吗?bigmemory 应该能够帮助解决这个问题吗?

非常感谢任何指导。

详细信息:R 版本 2.13.1 (2011-07-08) 平台:i386-pc-mingw32/i386 (32-bit) Intel 2 Duo Core @2.33GHz, 3.48GB RAM

0 投票
2 回答
2924 浏览

r - R 以错误消息终止:此应用程序已请求运行时以不寻常的方式终止它

据我随机看到,我有相当大的代码块有时会中断,并显示错误消息:

此应用程序已请求运行时以不寻常的方式终止它。请联系应用程序的支持团队以获取更多信息。

一些研究表明,当被调用时,这似乎是一条 Windows/C runtime消息abort(例如,请参见此链接)。这让我发疯:因为这不是R我不知道去哪里引发的错误。有没有人知道在哪里R或可能data.table(如果一个包abortC runtime[??] 中调用该函数)调用该abort函数?

以下是一些进一步的信息:

  1. 问题与机器无关:我在两台不同的机器上尝试过,有时它们都崩溃了。
  2. 问题与 R 版本无关:我尝试使用2.13.12.13.22.14.0.
  3. 两台机器都运行 Windows 7(64 位)。
  4. 这个问题似乎与我的data.tables. 当我人为地减小更大的大小时data.table,代码运行起来就像一个魅力。然而,有趣的是,一台机器的 RAM 比另一台机器大得多(16 GB 与 6 GB)。然而,这个额外的 RAM 并没有真正的帮助,至少看起来如此。
  5. 该问题不可重现,并且在我的代码中的不同部分中断。我注意到这一点是因为我的代码在 Sweave 文档中运行,所以我可以在 R 崩溃后打开 .tex 文件,并且它总是停在不同的位置。但是,它似乎总是在data.table调用操作时(但这并不意味着很多,因为我的代码严重依赖data.table)。然而,即使我不调用 Sweave,而只是运行代码,它有时也会中断。所以它似乎与 Sweave 无关。
  6. 它与我正在使用的编辑器无关。我使用RStudio,但通过在纯 R 命令窗口中运行代码来重现此行为。

这基本上是我想出的所有可能的解释。因此,如果有人对这个错误可能来自哪里或我还能检查什么有任何提示,那就太好了。

PS:接下来的几天我不会在我的机器上,所以如果我没有立即给出反馈,我希望你能原谅我。尽管如此,我还是想在圣诞节前发布这个问题,否则我无法享受我心爱的R痛苦,我正坐在家里,而不是试图治愈它......

更新

我进一步研究了这个问题,过了一会儿,我得到了一个相当小的例子,data.table 它打破了我的 R 会话。如果此问题已得到解决并解决了此处所述的 R 崩溃(请注意,这是一个很大的问题,因为我在 data.table 列表中发布的示例只是中断了我的 R 会话并且没有以我描述的错误消息结束它这里),我会在这里写一个答案并接受它。

0 投票
1 回答
1313 浏览

r - 使用 plyr、doMC 和 summarise() 处理非常大的数据集?

我有一个相当大的数据集(~1.4m 行),我正在对其进行拆分和总结。整个事情需要一段时间才能运行,而我的最终应用程序取决于频繁运行,所以我的想法是像这样使用 plyrdoMC.parallel=TRUE标志(简化一点):

如果我将内核数明确设置为两个(使用registerDoMC(cores=2)),我的 8 GB RAM 可以让我看透,并且可以节省大量时间。但是,如果我让它使用所有 8 个内核,我很快就会耗尽内存,因为每个分叉的进程似乎都克隆了内存中的整个数据集。

我的问题是是否可以以更节省内存的方式使用 plyr 的并行执行工具?我尝试将我的数据框转换为 a big.matrix,但这似乎只是迫使整个事情回到使用单核:

这是我第一次涉足多核 R 计算,所以如果有更好的思考方式,我愿意接受建议。

更新:与生活中的许多事情一样,事实证明我在代码的其他地方做了其他愚蠢的事情,并且在这个特定实例中,多处理的整个问题成为一个有争议的问题。但是,对于大数据折叠任务,我会data.table记住。我能够以一种直接的方式复制我的折叠任务。

0 投票
2 回答
313 浏览

r - 从两个数据帧创建一个评分矩阵

我正在尝试比较X存储在两个数据帧 ( foo, ) 中的变量集 ( bar)。每个X都是一个唯一的自变量,最多有 10 个Y与之相关的值。我想通过比较Y它们共有的值的数量来比较每个 foo.X 和每个 bar.X - 所以输出可以是一个矩阵,其轴的长度为 foo.x 乘以 bar.x。

这个 foo 和 bar 的简单示例想要返回一个 2x2 矩阵,将 a,b 与 c,d 进行比较:


编辑:


我将以下代码留给其他新手学习(for 循环是有效的,但可能非常次优),但下面的两个解决方案是有效的。特别是 Ramnath 对 data.table 的使用在处理非常大的数据帧时非常有效。

将数据帧存储为列表,其中使用stack函数存储 y 的值

编写一个函数来比较两个堆叠列表中的成员资格

写一个输出矩阵

}

0 投票
1 回答
1869 浏览

r - 在使用 data.table 的 R 中,当条件字段为整数时,一个子集或查询如何?

我正在使用 data.table 包。有很多使用二分搜索的子集、查询或搜索(或任何你想称之为的)的例子,这显然比矢量扫描快得多。这是帮助文件的摘录。

但是,如果要搜索的列不是一个因素(或字符)而是一个整数,会发生什么。

这不起作用,因为整数 10000 被解释为该 data.table 中不存在的第 10000 行。

如果我们修改语法,那么我们就会得到我们正在寻找的东西。

但是,这看起来很像是慢速矢量扫描方法。data.table 包中是否有整数的二进制搜索功能?感谢您期待您的帮助。

0 投票
1 回答
1936 浏览

r - 在使用 data.table 的 R 中,如何排除行以及如何在整数列中包含 NA 值

我经常使用 data.table。它运行良好,但我发现转换语法需要很长时间才能利用二进制搜索。

在下面的数据表中,如何 1 选择所有行,包括 CPT 值所在的行,NA但排除 CPT 值为 23456 或 10000 的行。

以下行有效,但我认为它使用矢量扫描方法而不是二进制搜索(或二进制排除)。有没有办法通过二进制方法删除行?

0 投票
4 回答
20301 浏览

python - 为什么在 2012 年 python 中的 pandas 合并比 R 中的 data.table 合并更快?

我最近遇到了python 的pandas库,根据这个基准,它执行非常快速的内存合并。它甚至比 R 中的data.table包(我选择的分析语言)还要快。

为什么pandas比 快那么多data.table?是因为 python 比 R 具有固有的速度优势,还是有一些我不知道的权衡?有没有办法在data.table不诉诸merge(X, Y, all=FALSE)and的情况下执行内部和外部联接merge(X, Y, all=TRUE)

比较

这是用于对各种包进行基准测试的R 代码Python 代码。

0 投票
1 回答
3646 浏览

r - 使用 data.tables,尝试按列索引聚合数据

我在使用 data.table 包时遇到了一些问题。我正在使用这个包,因为它在内存方面似乎非常快速和高效,并且它将处理一个非常大的数据集(~ 6m x 300)。

所以,基本上我遇到的问题的一个例子是:

这给出了以下

我要做的是按 V1 和 V2 聚合数据

我遇到的问题是,如果我不明确知道要聚合的列的名称,或者如果我想循环通过 100 列得到 100 个不同的聚合,我该怎么做?

data.table 参考手册说这是因为变量是在数据表的范围内引用的,所以它的工作方式是这样的,所以 CC[, V1] 将给出一列,而 CC[, "V1"] 不会。它说你可以使用类似的东西

但这似乎不起作用,我尝试了一些方法,例如在向量中设置变量名以及 quote()、noquote()、enquote() 的各种组合,但我似乎无法弄清楚如果它是可能的。

如何将其设置为循环遍历每个列名聚合的列名列表?

如果没有,有没有更好的方法来快速聚合这样的大型数据集?

谢谢。