2014-03-27 4 views
0

파일을 전달하는 R에서 함수를 정의하고 열의 다다미 프레임에있는 정보를 읽고 유지하려고합니다. 파일은 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) 
    } 
} 

답변

0

가 자동으로 분리를 감지 fread 기본 sep="auto" 옵션 패키지 data.table에서 시도 :

내 기능입니다.

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