2013-06-13 1 views
1

첫 번째 행에 머리글로 20 개의 필드가있는 파일이 있습니다. 나머지 행은 필드 수가 같지 않습니다. 일부 행에는 헤더보다 많은 열이 있습니다. read.delim()을 사용하여 읽으려고하면 오류없이 데이터를 읽지 만 총 행 수가 원래 수보다 많습니다. 여기 nrow()가 원본보다 많은 행을 제공합니다.

파일의 몇 라인이다 :

Chromosome Position SNPid Reference Alternate QUAL Homozygosity Tool Depth MappingQuality EFFECT IMPACT FUNCTIONAL_CLASS CODON_CHANGE AMINO_ACID_CHANGE GENE_NAME GENE_BIOTYPE GENE_CODING  TRANSCRIPT_ID EXON_ID  
chr1 403111 . G A 24 het SAM 20 55 INTERGENIC MODIFIER _ _ _ _ _ _ _ _ _ 
chr1 602567 rs21953190 A G 3265.77 hom GATKSAM 91 58.46 SYNONYMOUS_CODING LOW SILENT gaT/gaC D1034 ADNP2 protein_coding CODING ENSCAFT00000000008 5 _ 
chr1 604894 rs21953191 A G 2869.77 hom GATKSAM 77 59.70 NON_SYNONYMOUS_CODING MODERATE MISSENSE Ttt/Ctt F259L ADNP2 protein_coding CODING ENSCAFT00000000008 5 _ 
chr1 758630 . T TC 1531.73 hom GATKSAM 38 46.20 INTRON MODIFIER _ _ _ PQLC1 protein_coding CODING ENSCAFT00000000011 2 _ 
chr1 800715 . C CT 514.73 hom GATKSAM 13 60.00 INTRON MODIFIER _ _ _ PQLC1 protein_coding CODING ENSCAFT00000000011 6 ,SPLICE_SITE_ACCEPTOR HIGH _ _ _ PQLC1 protein_coding CODING ENSCAFT00000000011 7 ,SPLICE_SITE_DONOR HIGH _ _ _ PQLC1 protein_coding CODING ENSCAFT00000000011 6 _ 
chr1 1104035 rs21966859 G A 3803.77 hom GATKSAM 97 57.97 INTRON MODIFIER _ _ _ NFATC1 protein_coding CODING ENSCAFT00000000013 2 ,INTRON MODIFIER _ _ _ NFATC1 protein_coding CODING ENSCAFT00000036234 2 _ 
chr1 1120994 . CGCG C 604.73 hom GATKSAM 21 56.55 INTERGENIC MODIFIER _ _ _ _ _ _ _ _ ,UPSTREAM MODIFIER _ _ _ NFATC1 protein_coding CODING ENSCAFT00000000013 _ ,UPSTREAM MODIFIER _ _ _ NFATC1 protein_coding CODING ENSCAFT00000036234 _ _ 
chr1 1136916 rs21935602 G A 3899.77 hom GATKSAM 101 59.17 DOWNSTREAM MODIFIER _ _ _ ATP9B protein_coding CODING ENSCAFT00000000014 _ ,DOWNSTREAM MODIFIER _ _ _ ATP9B protein_coding CODING ENSCAFT00000042968 _ ,UTR_3_PRIME MODIFIER _ _ _ ATP9B protein_coding CODING ENSCAFT00000046825 29 _ 

가 R에 판독되고, 행의 개수는 도시 계산 된 file.But 9 개 행이 12

로서
read.delim("test.txt",header=T,sep='\t')->data 
nrow(data) 

누군가가 도움을 받아 데이터를 올바르게 읽을 수 있습니까? 다음은

> dput(data) 
structure(list(Chromosome = structure(c(3L, 3L, 3L, 3L, 3L, 1L, 
3L, 2L, 3L, 2L, 3L, 2L), .Label = c("HIGH", "MODIFIER", "chr1" 
), class = "factor"), Position = structure(c(4L, 5L, 6L, 7L, 
8L, 9L, 1L, 9L, 2L, 9L, 3L, 9L), .Label = c("1104035", "1120994", 
"1136916", "403111", "602567", "604894", "758630", "800715", 
"_"), class = "factor"), SNPid = structure(c(1L, 4L, 5L, 1L, 
1L, 2L, 6L, 2L, 1L, 2L, 3L, 2L), .Label = c(".", "_", "rs21935602", 
"rs21953190", "rs21953191", "rs21966859"), class = "factor"), 
Reference = structure(c(4L, 1L, 1L, 5L, 2L, 6L, 4L, 6L, 3L, 
6L, 4L, 6L), .Label = c("A", "C", "CGCG", "G", "T", "_"), class = "factor"), 
Alternate = structure(c(1L, 5L, 5L, 8L, 4L, 7L, 1L, 6L, 3L, 
6L, 1L, 2L), .Label = c("A", "ATP9B", "C", "CT", "G", "NFATC1", 
"PQLC1", "TC"), class = "factor"), QUAL = structure(c(2L, 
4L, 3L, 1L, 7L, 9L, 5L, 9L, 8L, 9L, 6L, 9L), .Label = c("1531.73", 
"24", "2869.77", "3265.77", "3803.77", "3899.77", "514.73", 
"604.73", "protein_coding"), class = "factor"), Homozygosity = structure(c(2L, 
3L, 3L, 3L, 3L, 1L, 3L, 1L, 3L, 1L, 3L, 1L), .Label = c("CODING", 
"het", "hom"), class = "factor"), Tool = structure(c(6L, 
5L, 5L, 5L, 5L, 1L, 5L, 3L, 5L, 2L, 5L, 4L), .Label = c("ENSCAFT00000000011", 
"ENSCAFT00000000013", "ENSCAFT00000036234", "ENSCAFT00000042968", 
"GATKSAM", "SAM"), class = "factor"), Depth = structure(c(4L, 
9L, 8L, 6L, 2L, 7L, 10L, 3L, 5L, 11L, 1L, 11L), .Label = c("101", 
"13", "2", "20", "21", "38", "7", "77", "91", "97", "_"), class = "factor"), 
MappingQuality = structure(c(5L, 8L, 10L, 4L, 11L, 1L, 7L, 
12L, 6L, 2L, 9L, 3L), .Label = c(",SPLICE_SITE_DONOR", ",UPSTREAM", 
",UTR_3_PRIME", "46.20", "55", "56.55", "57.97", "58.46", 
"59.17", "59.70", "60.00", "_"), class = "factor"), EFFECT = structure(c(4L, 
8L, 7L, 5L, 5L, 3L, 5L, 1L, 4L, 6L, 2L, 6L), .Label = c("", 
"DOWNSTREAM", "HIGH", "INTERGENIC", "INTRON", "MODIFIER", 
"NON_SYNONYMOUS_CODING", "SYNONYMOUS_CODING"), class = "factor"), 
IMPACT = structure(c(4L, 2L, 3L, 4L, 4L, 5L, 4L, 1L, 4L, 
5L, 4L, 5L), .Label = c("", "LOW", "MODERATE", "MODIFIER", 
"_"), class = "factor"), FUNCTIONAL_CLASS = structure(c(4L, 
3L, 2L, 4L, 4L, 4L, 4L, 1L, 4L, 4L, 4L, 4L), .Label = c("", 
"MISSENSE", "SILENT", "_"), class = "factor"), CODON_CHANGE = structure(c(3L, 
4L, 2L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L), .Label = c("", 
"Ttt/Ctt", "_", "gaT/gaC"), class = "factor"), AMINO_ACID_CHANGE = structure(c(7L, 
3L, 4L, 7L, 7L, 6L, 7L, 1L, 7L, 5L, 7L, 2L), .Label = c("", 
"ATP9B", "D1034", "F259L", "NFATC1", "PQLC1", "_"), class = "factor"), 
GENE_NAME = structure(c(6L, 2L, 2L, 5L, 5L, 7L, 4L, 1L, 6L, 
7L, 3L, 7L), .Label = c("", "ADNP2", "ATP9B", "NFATC1", "PQLC1", 
"_", "protein_coding"), class = "factor"), GENE_BIOTYPE = structure(c(3L, 
4L, 4L, 4L, 4L, 2L, 4L, 1L, 3L, 2L, 4L, 2L), .Label = c("", 
"CODING", "_", "protein_coding"), class = "factor"), GENE_CODING = structure(c(6L, 
2L, 2L, 2L, 2L, 3L, 2L, 1L, 6L, 4L, 2L, 5L), .Label = c("", 
"CODING", "ENSCAFT00000000011", "ENSCAFT00000036234", "ENSCAFT00000046825", 
"_"), class = "factor"), TRANSCRIPT_ID = structure(c(8L, 
4L, 4L, 5L, 5L, 3L, 6L, 1L, 8L, 8L, 7L, 2L), .Label = c("", 
"29", "6", "ENSCAFT00000000008", "ENSCAFT00000000011", "ENSCAFT00000000013", 
"ENSCAFT00000000014", "_"), class = "factor"), EXON_ID = structure(c(5L, 
3L, 3L, 2L, 4L, 5L, 2L, 1L, 5L, 5L, 5L, 5L), .Label = c("", 
"2", "5", "6", "_"), class = "factor"), X = structure(c(6L, 
6L, 6L, 6L, 4L, 1L, 3L, 1L, 5L, 1L, 2L, 1L), .Label = c("", 
",DOWNSTREAM", ",INTRON", ",SPLICE_SITE_ACCEPTOR", ",UPSTREAM", 
"_"), class = "factor")), .Names = c("Chromosome", "Position", 
"SNPid", "Reference", "Alternate", "QUAL", "Homozygosity", "Tool", 
"Depth", "MappingQuality", "EFFECT", "IMPACT", "FUNCTIONAL_CLASS", 
"CODON_CHANGE", "AMINO_ACID_CHANGE", "GENE_NAME", "GENE_BIOTYPE", 
"GENE_CODING", "TRANSCRIPT_ID", "EXON_ID", "X"), class = "data.frame", row.names = c(NA, 
-12L)) 
+0

: 편집을 수행하여 질문 본체에 투입되어 있어야 데이터 샘플에 지적 된 후에

, 쉼표를 따라 주석을 삭제하려면이 시도 '는 이미'header'와'sep'를 여러분이 선택한 값으로 설정했습니다. 미래에는'data = read.delim ("test.txt")'로 가십시오. 또한'dput (data)'또는'head (data)'를 사용하여 데이터를 더 잘 이해할 수 있습니다. – harkmug

+0

ncol()을 호출하면 어떻게됩니까? 꼬리()? 데이터 프레임의 모습에 대해 더 많은 정보를 얻는 것이 도움이 될 것입니다. 또한 변수 "data"를 호출하는 것을 피하는 것이 가장 좋습니다. 왜냐하면 그것은 r 함수에 내장되어 있기 때문입니다. – janattack

+0

필드 사이의 모든 공백을 탭 (공백이 아닌)으로 재확인합니다 (1). (2) 주위에 떠있는 느슨한 따옴표 문자가 없거나'quote = ""'로 설정하십시오. 공개적으로 액세스 할 수있는 곳에 데이터 파일을 게시하는 것이 좋습니다. –

답변

2

R은 한 줄에 21이 아니라 20 이상의 필드가 생각 dput의 출력 (데이터)입니다 (아마도이 ​​각 라인에 후행 탭?있다), 그리고 선 6-9가 추가 필드 :

count.fields("test.txt",sep="\t") 
## [1] 21 21 21 21 21 41 31 41 41 

이 처음 5 개 라인에서 무슨 일이 일어나고 있는지 추측하려고 read.delim 중 도대체, 혼란 (말아야을하지만 그것이있는 방법이다). 이 문제를 해결하기 위해 fill=TRUE을 사용할 수 있다고 생각할 수도 있지만 그렇게 할 수는 없습니다.

내가 필드 유형을 지정 fill=TRUE과 함께 colClasses를 사용하여 시도 (나는 colClasses=rep("character",41)를 사용하지만, 당신은 아마 그것보다 더 나은 추측 할 수있다)하지만 헤더는 21 열이 아마 때문에 작동하지 않습니다.

data.table 패키지의 fread 기능은 좀 더 잘 할 수 있지만, 당신이 그것을 말할 경우에만 # 5 후 라인에서 형식을 추측하려고하고 21

library(data.table) 
nrow(fread("test.txt",autostart=5)) ## 9 
이상의 열에서 데이터를 삭제하지

흠 심지어 예상대로 작동하지 않습니다 (심지어 헤더를 올바르게 선택하지 않습니다. header=TRUE을 설정하더라도 열 21에 헤더 필드가 없을 수 있습니다 ... 결론은 당신은 아마 그 여분의 필드가 무엇인지 알아 내야하고 그들과 더 명백한 것을해야합니다 (예 : 헤더 필드 추가 ...)

기본적으로 R은 데이터를 깨끗하게 처리 할 것으로 기대합니다. 이 예제를 data.table 패키지의 관리자에게 보낼 가치가 있습니다. 누가 fread을 가능한 한 강력하게 만들려고 노력하고 있습니까? 이것은 도전이 될 것입니다.

+0

해결 방법으로'count.fields'를 사용하여 파일을 검사 한 후 파일을 두 번 읽으려면'skip'과'nrows '를 사용할 수 있습니까? 'rbind.fill'을 통해 이들을 함께 결합합니까? – joran

2

데이터를 보면 많은 융합 선으로 매우 "돌연변이"되었음을 알 수 있습니다. 대부분의 경우 쉼표가 표시됩니다. 나는이 데이터가 당신이 기대하는 것과 다른 포맷이라고 생각한다. Dput 데이터의 첫 번째 요소는 염색체 값 = c ("HIGH", "MODIFIER", "chr1")가있는 요소였습니다. 이는 원래 데이터의 구성에 대한 이해가 부족한 현명한 결과가 아닙니다. 원본 텍스트 파일을 인터넷을 통해 액세스 할 수있는 어딘가에 게시하여 원래 레이아웃을 검사 할 수 있도록해야합니다. 특히 분리 문자라고 생각되는 탭은 SO 인터페이스에 캡처되지 않거나 캡처되지 않습니다.`read.delim을 참고하시기 바랍니다

datL <- readLines("~/Downloads/test.txt") 
datLred <- gsub("[,].+$", "", datL) 
read.delim(text=datLred) 

> str(read.delim(text=datLred)) 
'data.frame': 8 obs. of 21 variables: 
$ Chromosome  : Factor w/ 1 level "chr1": 1 1 1 1 1 1 1 1 
$ Position   : int 403111 602567 604894 758630 800715 1104035 1120994 1136916 
$ SNPid   : Factor w/ 5 levels ".","rs21935602",..: 1 3 4 1 1 5 1 2 
$ Reference  : Factor w/ 5 levels "A","C","CGCG",..: 4 1 1 5 2 4 3 4 
$ Alternate  : Factor w/ 5 levels "A","C","CT","G",..: 1 4 4 5 3 1 2 1 
snipped remain columns 
+0

코멘트에 OP가 남겨진 [link] (http://www.fileconvoy.com/dfl.php?id=g3581360c62f3f9449993080447c4a371cf11dccab)을 보았습니까? – joran

+0

아니요. (질문에 편집에 넣었어야합니다.) –

+1

아주 멋진 Procrustean 솔루션. –

관련 문제