如何在r中的循环中将列标题分配给数据帧?

时间:2017-07-11 02:36:40

标签: r for-loop tar do.call readr

1)我在目录“C:/ Users / Me / Desktop / JUNETEST /”中有48个tar.gz文件。 这些文件都具有相同的格式,但代表每个文件的小时的数字除外(即voa_20170601-110000.tar.gz而不是voa_20170601-120000.tar.gz。我需要导入所有48个文件并解压缩文件,然后只取出每个“.tar.gz”中具有相同名称的数据文件。名称为“hit_data.tsv”。我想分配每个“hit_data.tsv” “作为数据框列表中的一个元素。我的代码似乎正确地解压缩了所有48个文件。

然而,问题在于读取hit_data.tsv文件。它试图读入每一列,但由于没有列标题而有问题,所以它只读取第一列。  如果单独拉出每个文件,我会为 colnames(hit_data.tsv)分配一个名为Headers的向量的值。每个文件都是相同的列名,因此Header向量可以应用于每个hit_data.tsv。我的问题是,如何在循环期间为每个文件分配列名?或者如何更正我的代码以读取“hit_data.tsv”文件的所有列?

当前状态下的代码如下:

    files <- list.files(path = "C:/Users/Reginald/Desktop/JUNETEST/",pattern = "tar.gz")
VOA<-length(files)

for (i in files){ 
  eval(parse(text = paste0("untar(\"C:/Users/Reginald/Desktop/JUNETEST/",i,"\",files=\"hit_data.tsv\")",sep="" )))
  VOA[i] <- read_tsv("~/hit_data.tsv")
  #VOA[i]<- as.data.frame(VOA[i])
  #colnames(VOA[i])<-Headers[1,]
VOA.df <-do.call(rbind,VOA[i])

}

1 个答案:

答案 0 :(得分:0)

我猜您在read_tsv包中使用readr

如果是这种情况,您可以在for循环中尝试以下代码

read_tsv('~/hit_data.tsv', col_names=Headers)

使用help()或阅读包文档(readr.pdf)以了解您正在使用的功能也是一种很好的做法。