在R中的read.delim中获取附加NA列
我正在读取表单的在R中的read.delim中获取附加NA列,r,tabs,na,read.table,R,Tabs,Na,Read.table,我正在读取表单的R中的文本文件(从终端) 但是当我在R中使用read.delim阅读这篇文章时,它在末尾添加了一列NA。我可以删除该列,但我想知道为什么它会创建额外的列,以及在实际读取文件时如何避免该列 > d=read.delim("output_perl_hmi.txt", header=F) > colnames(d) <-c("COUNT", "flybasename", "GENENAME", "START", "END", "TYPE","SAMPLE", "pos
R
中的文本文件(从终端)
但是当我在R中使用read.delim阅读这篇文章时,它在末尾添加了一列NA。我可以删除该列,但我想知道为什么它会创建额外的列,以及在实际读取文件时如何避免该列
> d=read.delim("output_perl_hmi.txt", header=F)
> colnames(d) <-c("COUNT", "flybasename", "GENENAME", "START", "END", "TYPE","SAMPLE", "posterior_probability")
> head(d)
COUNT flybasename GENENAME START END TYPE SAMPLE posterior_probability NA
1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072 NA
2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677 NA
>d=read.delim(“output\u perl\u hmi.txt”,header=F)
>colnames(d)头(d)
计数flybasename GENENAME开始结束类型样本后验概率NA
1 CG10619-RB tup 18864094 18864523版次GFP_RNAi3_R1 0.8707072 NA
2 1 CG11050-RC CG11050 6613278 6612484版次GFP_RNAi3_R1 0.9992677 NA
首先,我必须推断您的输入文件是由制表符分隔的,即使您没有指定,因为默认值为sep='\t'
其次,我强烈怀疑,在数据末尾增加一列NA的原因是,在输入文件的每一行末尾都有一个尾随选项卡。这导致read.delim()
认为在尾部选项卡后面有一列,它将其解析为NA,因为那里没有任何内容
下面我将演示这一点。我创建了两个文件,file1.txt
和file2.txt
。前者包含您将输入文件粘贴到问题中时的精确输入文件,假设(1)它使用制表符分隔符,(2)每行上只有一个尾随制表符。后者相同,但没有尾随选项卡
为了澄清空白,在我的cat
调用中,我传递了-vet
,它将选项卡显示为^I
,将EOL显示为$
。通常,这不足以完全消除数据的歧义,但因为我们知道您的输入文件没有扬抑符或美元,所以在这种情况下它将是明确的
system('cat -vet file1.txt;');
## 1^ICG10619-RB^Itup^I18864094^I18864523^Irev^IGFP_RNAi3_R1^I0.870707220482784^I$
## 1^ICG11050-RC^ICG11050^I6613278^I6612484^Irev^IGFP_RNAi3_R1^I0.999267733859066^I$
d <- read.delim('file1.txt', header=F );
d;
## V1 V2 V3 V4 V5 V6 V7 V8 V9
## 1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072 NA
## 2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677 NA
system('cat -vet file2.txt;');
## 1^ICG10619-RB^Itup^I18864094^I18864523^Irev^IGFP_RNAi3_R1^I0.870707220482784$
## 1^ICG11050-RC^ICG11050^I6613278^I6612484^Irev^IGFP_RNAi3_R1^I0.999267733859066$
d <- read.delim('file2.txt', header=F );
d;
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072
## 2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677
为了在这里真正完整,我刚刚测试了read.delim()
,看看如果输入行包含不一致的分隔符,它会做什么。它似乎尊重“最宽”的输入行,这意味着返回的data.frame将包含尽可能多的列,以覆盖输入文件中最分隔的行。所有短线的最右侧单元格中都会有NA,而该行中没有包含NA。请尝试str(d)查看添加colname前后的数据结构
system('cat -vet file1.txt;');
## 1^ICG10619-RB^Itup^I18864094^I18864523^Irev^IGFP_RNAi3_R1^I0.870707220482784^I$
## 1^ICG11050-RC^ICG11050^I6613278^I6612484^Irev^IGFP_RNAi3_R1^I0.999267733859066^I$
d <- read.delim('file1.txt', header=F );
d;
## V1 V2 V3 V4 V5 V6 V7 V8 V9
## 1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072 NA
## 2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677 NA
system('cat -vet file2.txt;');
## 1^ICG10619-RB^Itup^I18864094^I18864523^Irev^IGFP_RNAi3_R1^I0.870707220482784$
## 1^ICG11050-RC^ICG11050^I6613278^I6612484^Irev^IGFP_RNAi3_R1^I0.999267733859066$
d <- read.delim('file2.txt', header=F );
d;
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072
## 2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677
system('cat -vet file3.txt;');
## 1^ICG10619-RB^Itup^I18864094^I18864523^Irev^IGFP_RNAi3_R1^I0.870707220482784^I^I$
## 1^ICG11050-RC^ICG11050^I6613278^I6612484^Irev^IGFP_RNAi3_R1^I0.999267733859066^I^I$
d <- read.delim('file3.txt', header=F );
d;
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
## 1 1 CG10619-RB tup 18864094 18864523 rev GFP_RNAi3_R1 0.8707072 NA NA
## 2 1 CG11050-RC CG11050 6613278 6612484 rev GFP_RNAi3_R1 0.9992677 NA NA