首页 文章

如何在R中读取多个csv文件时将数据添加为列?

提问于
浏览
0

我有很多csv文件,我试图通过“data.table”读取 . csv文件的结构相同(3列) .

我的目标是在一个主数据帧中读取所有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的列? “assign”正在创建新的数据帧!

2 回答

  • 1

    你试过 cbind 吗?

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

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

  • 0

    您可以使用 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)
    

相关问题