在 R 中列出与大 CSV 的连接

Posted

技术标签:

【中文标题】在 R 中列出与大 CSV 的连接【英文标题】:list concatenation with big CSVs in R 【发布时间】:2019-03-18 11:10:01 【问题描述】:

我是 R 的新手,我必须连接两个包含大约 200 万个观察值和 25 个变量的列表。更准确地说,我通过读取两个大型 CSV 获得了这两个列表,其中包含以下 R 代码行:

require(data.table)
setwd("/Users/cart")

DT2017 <- fread("BNR_2017.csv")
DT2018 <- fread("BNR_2018.csv")

现在,我想将 DT2017DT2018 列表连接到一个大约 400 万个观测值和 25 个变量中的一个中。

【问题讨论】:

rbind(DT2017, DT2016)怎么样 欢迎来到 Stack Overflow!请尝试阅读如何提出问题,其他人可以回答:***.com/help/how-to-ask。提供数据的方法有多种,可能将dput(&lt;yourData&gt;)dput(head(&lt;yourData&gt;)) 的输出添加到您的问题中就足够了。避免将代码或字母数字输出添加为图像。考虑如何做一个很好的例子:***.com/questions/5963269/…,看看如何相应地改变你的问题。编辑:在这种情况下,是的,按照@akrun 的解释进行操作。 使用库(gtools) final 【参考方案1】:

如果您使用fread,我认为您将在 R 中拥有两个数据框。但是,当您有这么多行时,使用简单的rbind 可能不是一个好主意,所以我认为最好先创建一个填充有NAs 的数据框,在 R 中预分配内存,然后使用循环“粘贴” ' 数据框中的每一行。

df <- data.frame(an = rep(NA, 4000), b1 = rep(NA, 40000), b3  = rep(NA, 40000))


df1 <- data.frame(an = seq(1:2000), b1 = seq(4001,6000), b3 = rep('abc', 2000))
df2 <- data.frame(an = seq(1:2000), b1 = seq(4001,6000), b3 = rep('abc', 2000))

### create a simple loop
for (i in 1:dim(df1)[1]) 
  print(i)
  df <- rbind(df, df1[i,])

然后你可以对 df2 做同样的事情。

【讨论】:

如果你预先分配内存,最好是df[i, ] &lt;- df1[i, ]。不需要rbind。您的代码错误,它将扩展 df,底部有行。尝试使用更小的 df。

以上是关于在 R 中列出与大 CSV 的连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark SQL 中将多个小表与大表连接的最佳方法

Linux中网卡相关命令以及SSH连接远程主机

循环遍历 csv 文件以创建连接的数据帧。需要在文件名中使用日期为每个文件创建新列

在 R 中展平或取消列出数据框

R 无法打开连接

使用 sparklyr 时无法在本地 Spark 连接中加载 .csv 数据