从不同目录中选择多个列,然后将它们合并到R中

时间:2018-03-10 02:19:33

标签: r dplyr plyr

我有一个目录,在我的目录中有多个文件。每个文件都有不同的csv。例如,在我的目录中有5个文件(实际情况下超过100个),每个文件有10个.csv文件。

我的问题是我想从这些文件中选择不同的列(所有文件具有相同的列数)并合并它们并创建一个数据框。

我的数据框看起来像 -

主要目录 -

File1-

a.csv -

 store_code  Tran1  Tran2  Tran3
     10       5454   7645   7111
     10       4154   7675   7000
     10       1454   2145   8431
      .........

b.csv -

 store_code  Tran1  Tran2  Tran3
     10       5004   6645   7291
     10       4109   1675   7000
     10       9454   1045   1031
      .........

 File2-

 c.csv - 

 store_code  Tran1  Tran2  Tran3
     20       1054   2045   1111
     20       2954   3075   7080
     20       1454   2145   8431
      .........

  d.csv - 

 store_code  Tran1  Tran2  Tran3
     20       1994   2045   9011
     20       2004   3075   8080
     20       1004   2145   1031
      .........

我已经完成了目录中所有文件的合并。但无法选择多列然后合并。对于这个例子,假设我想选择两列store_code和Tran2然后合并它们。

为了合并目的,我已经完成了以下代码 -

i.Main directory set as a working directory where all files are there.
ii.csv_files <- dir(pattern='.*[.]csv', recursive = T)

library(dplyr)
df <- rbind_all(lapply(csv_files, read.csv))

我的预期输出 -

store_code    Tran3 
10            7111 
10            7000 
10            1111  
..            ---- 
20            9011
20            8080

1 个答案:

答案 0 :(得分:1)

我不完全确定你追求的是什么;很遗憾,你没有提供预期的产出。

也许是这样的?

library(tidyverse);
Reduce(
    function(x, y) full_join(x, y, by = c("store_code", "Tran2")),
    lapply(csv_files, read.csv));
#  store_code Tran1.x Tran2 Tran3.x Tran1.y Tran3.y Tran1.x.x Tran3.x.x
#1         10    5454  7645    7111      NA      NA        NA        NA
#2         10    4154  7675    7000      NA      NA        NA        NA
#3         10    1454  2145    8431      NA      NA        NA        NA
#4         10      NA  6645      NA    5004    7291        NA        NA
#5         10      NA  1675      NA    4109    7000        NA        NA
#6         10      NA  1045      NA    9454    1031        NA        NA
#7         20      NA  2045      NA      NA      NA      1054      1111
#8         20      NA  3075      NA      NA      NA      2954      7080
#9         20      NA  2145      NA      NA      NA      1454      8431
#  Tran1.y.y Tran3.y.y
#1        NA        NA
#2        NA        NA
#3        NA        NA
#4        NA        NA
#5        NA        NA
#6        NA        NA
#7      1994      9011
#8      2004      8080
#9      1004      1031

说明:对所有CSV文件执行外部full_join,按store_codeTran2进行合并。由于每个文件有两个Tran2列,因此我将最后一列重新标记为Tran3

从这里开始,剩下要做的就是对列进行整理和重命名以反映源文件的来源。

样本数据

这是dput的{​​{1}}:

lapply(csv_files, read.csv)