【问题标题】:How to add data as column during read multi csv files in R?如何在 R 中读取多个 csv 文件时将数据添加为列?
【发布时间】:2017-07-25 07:20:33
【问题描述】:

我有很多 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”正在创建新的数据框!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你试过cbind吗?

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

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

    【讨论】:

      【解决方案2】:

      您也许可以使用cbind() 来实现这一点,它可以将您读取的每个新数据帧绑定到现有数据帧。我说可能,因为如果您希望读取的每个 CSV 文件具有相同的行数,这才有意义。您应该清楚为什么这是一项要求。考虑到这一点,这里有一个代码 sn-p,它读入两个 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)
      

      【讨论】:

      • 有 115 个 csv 文件,我尝试使用 cbind 但仍然添加为行而不是列!
      • @BigData 您的评论没有多大意义,但我的猜测是您当前的代码有问题。如果您想要一个最终数据框,您的选择实际上是按行或按列组合。根据您的描述,cbind() 是去这里的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2023-01-24
      • 1970-01-01
      • 2020-05-04
      • 2021-04-18
      相关资源
      最近更新 更多