在 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")
现在,我想将 DT2017
和 DT2018
列表连接到一个大约 400 万个观测值和 25 个变量中的一个中。
【问题讨论】:
rbind(DT2017, DT2016)
怎么样
欢迎来到 Stack Overflow!请尝试阅读如何提出问题,其他人可以回答:***.com/help/how-to-ask。提供数据的方法有多种,可能将dput(<yourData>)
或dput(head(<yourData>))
的输出添加到您的问题中就足够了。避免将代码或字母数字输出添加为图像。考虑如何做一个很好的例子:***.com/questions/5963269/…,看看如何相应地改变你的问题。编辑:在这种情况下,是的,按照@akrun 的解释进行操作。
使用库(gtools) final
【参考方案1】:
如果您使用fread
,我认为您将在 R 中拥有两个数据框。但是,当您有这么多行时,使用简单的rbind
可能不是一个好主意,所以我认为最好先创建一个填充有NA
s 的数据框,在 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, ] <- df1[i, ]
。不需要rbind
。您的代码错误,它将扩展 df
,底部有行。尝试使用更小的 df。以上是关于在 R 中列出与大 CSV 的连接的主要内容,如果未能解决你的问题,请参考以下文章