2017-03-05 100 views
0

我有很多csv文件,我试图读取“data.table”。 csv文件的结构相同(3列)。如何在R中读取多个csv文件时将数据添加为列?

我的目标是读取一个主数据帧中的所有csv文件!每个csv文件都应该添加为不在列中的列。

例如:

我的主要DF结构应该是这样的:

Name  Name2  csv_file_name_1  csv_file_name_2 ....... 

现在,我想要做的是:阅读新的CSV文件(我读的只是列号3)并添加到DF作为列。

例如,如果我有30 csv文件,我必须读取所有这些文件,并在主数据框中添加第3列作为新列。 (最终DF应该有30列)

我写了一些代码,我可以读取文件并获取文件名,并且一切正常。

files = list.files(path = path, pattern=".*csv") 
for (i in 1:length(files)) assign(str_sub(files[i],11,-5), 
           fread(files[i],colClasses = c("NULL", "NULL", NA))) 

但是我怎样才能将列添加到主DF? “分配”正在创建新的数据框!

回答

1

您可能可以通过使用cbind()来实现这一目标,它可以将您读取的每个新数据框绑定到现有数据框。我说可能是,因为如果您希望读取的每个CSV文件具有相同的行数,这样做才有意义。应该清楚为什么这是一项要求。有了这个警告这一点,这里是一个代码段读取两个CSV文件,给输出的类型,你想:

df  <- read.csv(file="path/to/file1.csv", sep=",", header=TRUE) 
df_new <- read.csv(file="path/to/file2.csv", sep=",", header=TRUE) 

# this next is required only if you need to change the column names in each 
# subsequent file to something else 
names(df_new) <- c("Name2", "csv_file_name2", "other_column2") 

df <- cbind(df, df_new) 
+0

有115个csv文件,我尝试过cbind,但仍然添加为行不列! –

+0

@BigData您的评论没有多大意义,但我的猜测是您当前的代码有问题。如果你想要一个单一的最终数据框架,你的选择真的是按行或按列组合。从你所描述的,'cbind()'是去这里的路。 –

0

你试过cbind

理想情况下,每个CSV表都有一个唯一标识符,允许您通过该标识符进行合并。

注意,使用cbind,请注意确保每个data.frame中的行对应于相同的观察结果(即df1中的第1行与df2中的第1行相同)。

相关问题