问题标签 [rbindlist]

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 投票
2 回答
94305 浏览

r - 为什么 rbindlist 比 rbind “更好”?

我正在阅读data.table有关 SO 的文档,并从这里的一些对话中注意到,这rbindlist应该比rbind.

我想知道为什么rbindlist优于rbind以及在哪些场景中rbindlist真正擅长rbind

在内存利用率方面有什么优势吗?

0 投票
2 回答
512 浏览

r - 有效地连接一长串大矩阵

我有一个 4 Gb 的 csv 文件要加载到我的 16 Gb 机器中,freadread.csv无法立即加载,它们会返回内存错误。

所以我决定逐块读取文件,它工作(大约一小时后),data.frames如果我信任环境选项卡,我会得到一个需要 2.5 Gb的列表RStudio,而保存为 RDS 时需要 1.2 Gb。

我现在遇到的问题是将所有内容连接回一个大的data.frame. 据我了解rbindlist是最有效的解决方案(或者是bind_rows?),但在我的情况下它仍然使用太多内存。

我想我可以通过rbindlist在列表项上使用nby来解决这个问题n,然后递归地直到我得到我的最终列表。不过,这个n数字必须手动校准,而且这个过程真的很难看(除了这个烦人的 csv 导入之外)。

我想到的另一个想法是找到一种方法来从我加载的数据中提供一个 SQLite 数据库,然后从 R 中查询它(我只会对数据执行subset,minmax操作)。

我能做得比这更好吗?

我的数据仅由integerand组成double,如果它有所作为。

0 投票
0 回答
612 浏览

r - 在 R 中的 foreach 中将 rbindlist 加速为 .combine

doSNOW考虑以下在带有包的 Windows 操作系统上运行的代码:

keys有些data.table有大约 2000 行,foo是一个运行相当长的时间(10s - 3m)并返回data.table单行的函数。

当我打开时.verbose = TRUE,我可以看到foo不同内核的功能按预期运行(比如 30m)。但是,在foreach完成所有操作后,代码又消耗了 30m(有时甚至更长)来合并 2000 data.table

需要注意的另一件事是,当 时verbose = TRUE,它总是显示,numValues: .., numResults: .., stopped: FALSE即使它是结束时foreach。我期待看到stopped: TRUE

任何想法可能是错误的以及如何提高性能?

0 投票
0 回答
283 浏览

r - R - 将新列 + 值添加到多个 data.tables

我正在阅读大约 50 个 csv 文件(相同的命名约定,相同的结构,每个文件大约 150k 行)。然后我还想合并所有文件,但我希望能够识别每一行的原始来源。

到目前为止,我的解决方案是根据 list.files 读取所有数据,然后将它们与 rbindlist 和 idcol 参数合并在一起。但是我在设置 idcol 参数时遇到了麻烦,以便它采用原始 data.table 的名称。此外,我不知何故努力将我的表定义为 rbindlist 的有效列表。

如何根据我的“文件名”变量为 rbindlist 定义一个列表?

此外 - 而不是在新创建的.id 列中只有一个数值,我想拥有原始 data.table 的值,例如 RV_v1 和 RV_v2 我怎样才能做到这一点?

In R, add NEW column to MULTIPLE df using df names已经提出并回答了一个类似的问题, 但我无法以某种方式对其进行修改,因此它对我有用..

为了能够重现我的问题,我上传了 5 个 csv 文件的样本。https://www.dropbox.com/s/qst2rgjkb0kpori/RVs.zip?dl=0 提前谢谢!

编辑:按照弗兰克的建议

可以很好地做我想做的事情。谢谢!

0 投票
1 回答
130 浏览

r - 导入由新行分隔的文本文件

最终,我需要创建下表:

等等。. .

我在许多 txt 文件中获取了我的数据,其中 ID 是文件的名称。年龄和性别用换行符分隔,例如:

现在,我将所有文件合并到一个数据表中,其中文件路径作为 ID 列(稍后我将使用 stringr 摆脱整个路径)

这是我的问题 - 我得到下表:

我尝试使用sep = "\n"但它什么也没做。如何告诉 R 每个变量在不同的行中?(最好使用data.table)

0 投票
2 回答
458 浏览

r - 由于循环中的字符串到日期转换导致的 Rbindlist 错误

我正在构建一个循环超过 10-1000 个文件的复杂代码,并根据 6 个分组列计算每个文件的一大堆汇总统计信息。一切正常,但是在双重应用结构中,我还尝试从文件名中提取日期并将其转换为日期格式,并将其作为列添加到每个数据帧中。

在我的完整代码中没有日期转换,以及在这个示例代码中它可以正常工作,但是在其中进行转换时,它似乎会导致循环突然产生奇怪的错误。

我已经尝试了几十种方法来使它工作。通常单个字符串到日期格式对我来说不是问题,但是如何在这个循环结构中进行这项工作?

一开始我以为问题是日期格式转换没有用,但是貌似可以用,但是导致rbindlist代码出现问题。

我不知道为什么它声称长度不同,或者如何解决它。

问题:如何在循环内或之后将字符串转换为日期格式。

我的代码:

更新: 我们现在有两个(部分)解决方案,但它们不会像 rbindlist 那样快,我相信我的实际大数据对象。

我试图在最终 ClusterResultList 的循环之外进行转换,但这会引发此错误:

0 投票
1 回答
201 浏览

r - rbindlist 的空间等价物?

我需要循环加载 SpatialPolygonDataFrames 。这些是通过缓冲道路文件创建的。但是,由于我的 SpatialLinesDataFrame 类的“道路”文件长 15000 行,因此 rbind 函数会逐渐变慢。如果它们是数据框,我会使用 rblindlist 来加快速度。但这不适用于 sp 对象(对吗?)。有人有好主意吗?

谢谢

詹姆士

0 投票
4 回答
794 浏览

r - rbindlist data.frames 的列表列并选择唯一值

我有一个 data.table 'DT',其中有一列('col2')是数据框列表:

col2 中的每个 data.frame 都有两列 colA 和 colB。我想要一个 data.table 输出,它根据 DT 的 col1 绑定这些 data.frames 的每个唯一行。我想这就像rbindlist在 data.table 的聚合函数中使用。

这是所需的输出:

DT ( DT[2, col2]) 的第二行的数据帧有重复的条目,并且每个唯一的 col1 只需要唯一的条目。

我尝试了以下操作,但出现错误。

这“有效”,但不是所需的输出:

无论如何rbindlist在data.table的聚合函数中使用?

0 投票
1 回答
80 浏览

r - 如何从 data.tables 列表中计算每组的平均值?

假设我们有一个这样的列表data.table

如果我想要一个可以计算所有 data.tables 中每组平均值的解决方案,我可以执行以下操作:

但是,对于我的数据,每个dt都很大(数百万行),每个列表也很庞大(每个列表中有 500-1000dt个)。可供选择的选项也远不止两个by

我计划使用遗传算法优化的部分功能需要按组计算上述平均值。我想知道在使用's 计算每组的能力之前是否有比rbind-ing list更有效的解决方案?data.table否则,最大化算法将对这个潜在的瓶颈计算进行许多函数调用。

任何帮助,将不胜感激!

0 投票
2 回答
426 浏览

r - 展开 data.table 的多列包含观察

我有一个data.table超过 2 列的类型list。我想扩展这些列,以便列表的每个元素成为一个新列。我想要一种比“手动”扩展每一列然后将表格连接在一起更优雅的方式。

设置

编辑:(提供json我从中获得的data.table

所以我有一个json这样的文件:

我读到的是:

这导致list长度为 2。

我可以将其转换为data.table

然后导致data.table类似:

这意味着我有几个包含列表的列,我想扩展它们。

什么样的作品

我知道要扩展一列,我可以这样做:

(我在这里发现:Expand list column of data.tables

现在,我可以通过重复此调用并使用 column 加入结果来扩展多个列r。这可能看起来像:

这会给我所需的输出:

我的问题是:

有没有更优雅、更有效的方式来扩展几列?理论上,我想要一个要扩展的列列表,然后进行一次调用,这将扩展所有列并返回上述结果。

此外,对于 column rows,扩展有点复杂:到目前为止,我正在创建一个 type 的新列list,其中不包括status记录。就像是:

然后可以使用上面的过程扩展rows2为 type 的三列,list随后可以使用相同的过程对其进行扩展。现在,这种方法很糟糕,原因很明显,因为对于在我之后阅读代码的任何人来说都不是很简单。此外,它需要大量的打字。我认为必须有更优雅的方式来解决这个问题。