2017-03-20 1 views
2

내가가이 데이터 셋 결합 :별도 컬럼/R의 하나의 열/행으로 행 <code>txt.file</code>를 사용

        Xenopsylla cheopis Echinolaelaps sp.  
Maxomys rajah       1     3              
Callosciurus prevostii borneensis  4     2  

이 함수를 사용하여

test<-read.table("data.txt",header=T) 
       Xenopsylla cheopis Echinolaelaps sp.  
Maxomys  rajah   1   3              
Callosciurus prevostii borneensis  4   2 

R 다른 열로 내 데이터를 인식하는 것 같다/행이 오류 발생 :

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : 
    line 2 did not have 4 elements 

내가 textConnection를 사용하려고 노력을하지만 보인다 내가 내가 여기처럼 모든

+2

read.table은 달리 지정하지 않는 한 공백을 기준으로 열을 구분합니다. 파일을 보지 않고서는 : "file.txt"도움을 받기가 어려울 것입니다. – Dave2e

+2

이것은 두 번째 유기체가 첫 번째 유기체와 비교하여 이름에 여분의 공간을 가지고 있기 때문입니다. 텍스트 파일의 열을 구분하는 것은 무엇입니까? 탭으로 구분 된 경우', sep = "\ t"'를'read.table'에 추가해보십시오. – neilfws

+0

잘못된 데이터가 더 쉽게 볼 수 있도록 데이터 집합이나 축소 된 버전의 데이터 집합을 공유 할 수 있습니까? – Ouistiti

답변

1

먼저 그냥 문자 벡터에 데이터를 저장 원하는 것을 생산하지 않습니다

test<-readChar("C:/Users/Julian/Downloads/file.txt", file.info("C:/Users/Julian/Downloads/file.txt")$size) 

은 물론, 당신은 당신 내 파일의 경로를 교체해야합니다. 이 그런 다음 gsub()

test<-gsub("([[:lower:]])([[:space:]])([[:lower:]])", "\\1\\3",test) 

마지막으로 사용하여 속과 종 사이의 공간을 없애, 당신은 text 인수 read.table()를 사용하여 데이터를 읽을 수 있습니다

a<-read.table(text=test,sep="\t",header=TRUE,row.names = 1) 
a 

           Xenopsyllacheopis Echinolaelapssp. Ixodessp. 
Maxomysrajah         3    8   9 
Callosciurusprevostiiborneensis     5    7   1 
Sundamysmuelleri        3    5   7 
Niviventercremoriventer       6    8   9 

이 편집 : 대답하기 OP의 코멘트에 새로운 질문 :

"([[:lower:]])([[:space:]])([[:lower:]])" 

을 사용하면이 패턴과 일치하는 readChar()으로 생성 한 문자열의 모든 부분을 찾을 수 있습니다. 이 패턴은 소문자 다음에 공백과 소문자가옵니다.

속은 대문자로 시작하기 때문에 속과 종 이름과 일치하지만 종 이름과 다음 속을 이해할 수 있습니다.

이제 "\\1\\3" 부분은 우리가 "([[:lower:]])([[:space:]])([[:lower:]])" 패턴의 첫 번째와 세 번째 부분을 유지한다는 것을 의미합니다. 즉, ([[:lower:]])([[:lower:]])입니다. "\\1\\3 사이에 공백이 없으므로 "\\1\\3"에 공백없이 연결합니다. 그러므로 우리는 속 (Genus) 종 대신에 일반 종 (Genusspecies)을 가질 것입니다.