2014-03-27 94 views
0

我想在R中定義一個函數,在該函數中傳遞一個文件,讀取並將信息保存在一個Dada Framen中。 這些文件可能是CSV,TXT或xls/xlsx;在CSV和TXT的情況下,信息可以用「,」,「;」,行或空格的跳轉來分隔。這些文件中的一個內容的一些例子,是下列之一:在不同的擴展名和分隔符中讀取文件

1234567890; 1234567890; 1234567890; 1234567890; 


Example: 
1234567890, 1234567890, 1234567890, 1234567890 

Another example: 
1234567890 1234567890 1234567890 1234567890; 


Another example: 
1234567890 
1234567890 
1234567890 

的想法將是功能是檢測什麼類型的文件,如何領域是分開的,它正在處理爲了保持該領域的數據幀的信息下列之一:

標籤

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

回答

0

嘗試freaddata.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 
+0

或多或少它工作正常,但我需要的數據被保存在一個單獨的列。現在數據存儲在不同的列中。有什麼辦法可以將所有列加入到一個列中? – Alex

相關問題