我有一个目录,在我的目录中有多个文件。每个文件都有不同的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
答案 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_code
和Tran2
进行合并。由于每个文件有两个Tran2
列,因此我将最后一列重新标记为Tran3
。
从这里开始,剩下要做的就是对列进行整理和重命名以反映源文件的来源。
这是dput
的{{1}}:
lapply(csv_files, read.csv)