【问题标题】:How to assign column headers to data frames with in a loop in r?如何在r中循环将列标题分配给数据帧?
【发布时间】:2017-12-14 22:05:03
【问题描述】:

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])

}

【问题讨论】:

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


    【解决方案1】:

    我猜你在readr 包中使用read_tsv

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

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

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

    【讨论】:

    • 感谢 kitman0804 的建议,但根据我收到的错误,col_names 只接受 TRUE 和 FALSE 而不是其他对象。我尝试了 column names = FALSE 仍然没有解决方案。
    • 哎呀,我仍然只阅读一列,但至少我没有收到标题错误。我会更多地阅读文档,看看有什么问题
    • @Reric 如果col_names是一个字符向量,值会作为列名,输入的第一行会读入输出数据框的第一行.
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2021-01-23
    • 1970-01-01
    • 2019-07-29
    • 2017-02-09
    • 2017-12-22
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多