问题标签 [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.
r - 为什么 rbindlist 比 rbind “更好”?
我正在阅读data.table
有关 SO 的文档,并从这里的一些对话中注意到,这rbindlist
应该比rbind
.
我想知道为什么rbindlist
优于rbind
以及在哪些场景中rbindlist
真正擅长rbind
?
在内存利用率方面有什么优势吗?
r - 有效地连接一长串大矩阵
我有一个 4 Gb 的 csv 文件要加载到我的 16 Gb 机器中,fread
但read.csv
无法立即加载,它们会返回内存错误。
所以我决定逐块读取文件,它工作(大约一小时后),data.frames
如果我信任环境选项卡,我会得到一个需要 2.5 Gb的列表RStudio
,而保存为 RDS 时需要 1.2 Gb。
我现在遇到的问题是将所有内容连接回一个大的data.frame
. 据我了解rbindlist
是最有效的解决方案(或者是bind_rows
?),但在我的情况下它仍然使用太多内存。
我想我可以通过rbindlist
在列表项上使用n
by来解决这个问题n
,然后递归地直到我得到我的最终列表。不过,这个n
数字必须手动校准,而且这个过程真的很难看(除了这个烦人的 csv 导入之外)。
我想到的另一个想法是找到一种方法来从我加载的数据中提供一个 SQLite 数据库,然后从 R 中查询它(我只会对数据执行subset
,min
和max
操作)。
我能做得比这更好吗?
我的数据仅由integer
and组成double
,如果它有所作为。
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
。
任何想法可能是错误的以及如何提高性能?
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 提前谢谢!
编辑:按照弗兰克的建议
可以很好地做我想做的事情。谢谢!
r - 导入由新行分隔的文本文件
最终,我需要创建下表:
等等。. .
我在许多 txt 文件中获取了我的数据,其中 ID 是文件的名称。年龄和性别用换行符分隔,例如:
现在,我将所有文件合并到一个数据表中,其中文件路径作为 ID 列(稍后我将使用 stringr 摆脱整个路径)
这是我的问题 - 我得到下表:
我尝试使用sep = "\n"
但它什么也没做。如何告诉 R 每个变量在不同的行中?(最好使用data.table)
r - 由于循环中的字符串到日期转换导致的 Rbindlist 错误
我正在构建一个循环超过 10-1000 个文件的复杂代码,并根据 6 个分组列计算每个文件的一大堆汇总统计信息。一切正常,但是在双重应用结构中,我还尝试从文件名中提取日期并将其转换为日期格式,并将其作为列添加到每个数据帧中。
在我的完整代码中没有日期转换,以及在这个示例代码中它可以正常工作,但是在其中进行转换时,它似乎会导致循环突然产生奇怪的错误。
我已经尝试了几十种方法来使它工作。通常单个字符串到日期格式对我来说不是问题,但是如何在这个循环结构中进行这项工作?
一开始我以为问题是日期格式转换没有用,但是貌似可以用,但是导致rbindlist代码出现问题。
我不知道为什么它声称长度不同,或者如何解决它。
问题:如何在循环内或之后将字符串转换为日期格式。
我的代码:
更新: 我们现在有两个(部分)解决方案,但它们不会像 rbindlist 那样快,我相信我的实际大数据对象。
我试图在最终 ClusterResultList 的循环之外进行转换,但这会引发此错误:
r - rbindlist 的空间等价物?
我需要循环加载 SpatialPolygonDataFrames 。这些是通过缓冲道路文件创建的。但是,由于我的 SpatialLinesDataFrame 类的“道路”文件长 15000 行,因此 rbind 函数会逐渐变慢。如果它们是数据框,我会使用 rblindlist 来加快速度。但这不适用于 sp 对象(对吗?)。有人有好主意吗?
谢谢
詹姆士
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的聚合函数中使用?
r - 如何从 data.tables 列表中计算每组的平均值?
假设我们有一个这样的列表data.table
:
如果我想要一个可以计算所有 data.tables 中每组平均值的解决方案,我可以执行以下操作:
但是,对于我的数据,每个dt
都很大(数百万行),每个列表也很庞大(每个列表中有 500-1000dt
个)。可供选择的选项也远不止两个by
。
我计划使用遗传算法优化的部分功能需要按组计算上述平均值。我想知道在使用's 计算每组的能力之前是否有比rbind
-ing list更有效的解决方案?data.table
否则,最大化算法将对这个潜在的瓶颈计算进行许多函数调用。
任何帮助,将不胜感激!
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
随后可以使用相同的过程对其进行扩展。现在,这种方法很糟糕,原因很明显,因为对于在我之后阅读代码的任何人来说都不是很简单。此外,它需要大量的打字。我认为必须有更优雅的方式来解决这个问题。