将标头值从一个文件匹配到R中的文件列表

时间:2018-03-10 19:06:15

标签: r loops read.table

我有一个包含数千个数据文件的文件夹(没有标签,只有列号)。我还有一个CSV,其中包含1)文件夹中的文件名,2)列标题编号和3)列标签。 我需要的是第3号!文件中的数据列按照相同的顺序。所以我想将正确的列名称与每个数据文件匹配,并通过匹配它们将它们绑定在一起(如查找表,但是对于标题)。

这是"查询标题"虚拟数据:

sample_weights

这里是文件的样子:

filenames <- c("file1", "file1", "file1","file2","file2", "file2", "file3", "file3", "file3")
num <- c(1, 2, 3, 1, 2, 3, 1, 2, 3)
label <- c("AA", "BB", "CC", "AA", "BB", "CC", "BB", "CC", "AA")
header <- data.frame(filenames,num,label)

> header
   filenames num label
1     file1   1    AA
2     file1   2    BB
3     file1   3    CC
4     file2   1    AA
5     file2   2    BB
6     file2   3    CC
7     file3   1    BB
8     file3   2    CC
9     file3   3    AA

然后我遍历我的目录中的这些文件,并根据列名将它们绑定在一起。

> file1
 1      2     3
 2.3   1.5   202.4

> file2
 1     2      3
2.1   1.0   200.8

> file3
  1      2     3
 1.0   208.1  2.1

所有三个文件的期望结果!

files <- dir("my dir")
z <- NULL

for (file in files) {
  x <- read.table(file.path("my dir", file), as.is=TRUE)
  names(x) <- c("AA","BB","CC") #this is where I'd like to name according to matching column
  z <- rbind(z,x) #bind current file to previous processed file
}

1 个答案:

答案 0 :(得分:0)

我们通过'filenames'列获取mgetsplit'标题'的{file'对象的值(假设它在全局环境中),{{1 (来自map2purrr列名称在'y'中带'num'列,用相应的'label'设置列名称

match