在没有 rbind() 的情况下在 R 中堆叠许多数据帧时出现数字与字符串问题

numeric vs string issue when stacking many data frames in R without rbind()

我有大约 200 个数据框,每个 100000 行乘以 45 列。列都是一样的。我想将它们堆叠到一个数据框中。

(我通过将一个大文本文件拆分为 200 个较小的文本文件并使用 read.csv() 获得了 160 个数据帧)

一些列包含字符串,一些包含数字。我已阅读 this answer 并且知道我不应该使用 rbind() 来完成此操作,但我 运行 遇到了麻烦。我的数据集中的 V1 列包含字符串。但是当我 运行 我的代码只插入第一个 100000:

#load in miniset1
load("filepath.Rda")

filetest <- data.frame(matrix(nrow=2000000, ncol = 45))
colnames(filetest)<-gsub("X", "V", colnames(filetest))
filetest[1:100000,]<-miniset1
head(filetest)

..它看起来像是在试图让 V1 成为一个数字而不是一个字符串。例如,它在 head() 调用中打印数字“5777”,而不是在那里写入的名称。有没有一种方法可以在我制作初始矩阵时指定它?我宁愿只能够使用其中一个数据集的特征,而不必手动编码每一列是字符串还是数字。

您给出的 link 警告您不要一次增加 data.frame 一行,您没有那样做。就个人而言,我会用一些可以手动处理非常大的 .csv 文件的东西来读取数据,比如 sqldf。这是一个 link Quickly reading very large tables as dataframes in R

您可以展开第一个数据框并保留列类型:

first<-data.frame(A="a", N=5)  
filetest<-first[1:2000000,]  

然后填写。

您可以在数据框列表中使用 Reduce()merge()

big.df <- Reduce(function(...) merge(..., all=TRUE), list(df1, df2, etc.))

不过请注意,当且仅当所有数据框中没有重复行时,这才有效。如果有重复项,此过程只会 return 每组 n 个重复项的一行。