读取不同扩展名和分隔符中的文件

时间:2014-03-27 16:44:03

标签: r csv xls

我想在R中定义一个函数,在该函数中传递文件,读取并将信息保存在列中的Dada Framen中。 文件可以是CSV,TXT或xls / xlsx;在CSV和theTXT的情况下,信息可以用“,”,“;”,行或空格的跳跃来分隔。其中一个文件的内容的一些示例将是以下一个:

1234567890; 1234567890; 1234567890; 1234567890;


Example:
1234567890, 1234567890, 1234567890, 1234567890

Another example:
1234567890  1234567890  1234567890  1234567890;


Another example:
1234567890
1234567890
1234567890

这个想法是该函数正在检测文件的类型,字段如何分离以及它正在处理信息以便将dataFrame中的字段保持为以下字段:

标签

1234567890
1234567890
1234567890

我已经定义了一个函数来处理问题的一部分,并且能够检测它正在发生的文件类型,如果它是xls或xlsx则处理它,但我不清楚如何处理部分目标到txt或csv类型的文件,它们可以有不同类型的分色。

这是我的功能:

READ_TAGS_LIST<-function(TAGS_LIST_file){
  extension<-tools::file_ext(TAGS_LIST_file)
  if(extension=="txt"){

  }
  if(extension=="csv"){

  }
  if(extension=="xls"){
    require(xlsx)
    DF_TAGS_LIST =read.xlsx(TAGS_LIST_file, 1)
    DF_TAGS_LIST<-as.data.frame(DF_TAGS_LIST)
    names(DF_TAGS_LIST)[1]<-("TAGS_IDE")
    return(DF_TAGS_LIST)
  }
  if(extension=="xlsx"){
    require(xlsx)
    DF_TAGS_LIST =read.xlsx(TAGS_LIST_file, 1)
    DF_TAGS_LIST<-as.data.frame(DF_TAGS_LIST)
    names(DF_TAGS_LIST)[1]<-("TAGS_IDE")
    return(DF_TAGS_LIST)
  }   
}

1 个答案:

答案 0 :(得分:0)

fread包中尝试data.table,默认sep="auto"选项会自动检测分隔符。

if(extension=="txt" | extension=="csv"){
    ...
    DF_TAGS_LIST =fread(TAGS_LIST_file)
    ...
}

<强>更新

假设文件结构如此,它也适用于空格分隔文件

a;b;c;d
1234567890;1234567890;1234567890;1234567890

您可以使用t()进行转置,因为您需要一列中的数据

if(extension=="txt" | extension=="csv"){
    ...
    DF_TAGS_LIST =as.data.frame(t(fread(TAGS_LIST_file)),row.names=FALSE)
    ...
}

<强>输出:

as.data.frame(t(fread("sample_fread.dat",header="auto")),row.names=FALSE)
          V1
1 1234567890
2 1234567890
3 1234567890
4 1234567890