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

时间:2015-07-17 18:21:30

标签: r 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成为一个数字而不是一个字符串。例如,它打印数字&#34; 5777&#34;在head()调用而不是写在那里的名称。有没有一种方法可以指明我在制作初始矩阵时?我宁愿只能使用其中一个数据集的特征而不是手动编写代码,无论每个列是字符串还是数字。

3 个答案:

答案 0 :(得分:0)

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

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

然后填写。

答案 1 :(得分:0)

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

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

请注意,当且仅当所有数据框中没有重复的行时,这将起作用。如果存在重复项,则此过程将仅为每组n​​个重复项返回单行。

答案 2 :(得分:-1)

您提供的链接警告您不要一次增加一行data.frame,您不会这样做。就个人而言,我会在数据中读取一些手工处理真正大的.csv文件,比如sqldf。这是一个链接Quickly reading very large tables as dataframes in R