填充= T不会使用单个字母(?)[R]

时间:2014-04-01 16:35:55

标签: r fill

我在一个用逗号分隔的单个字母的文件上使用'fill = T':

    Pred
1   T,T
2   NA
3   D
4   NA
5   NA
6   T
7   P,B
8   NA
9   NA  

使用命令:

sift <- read.table("/home/pred.txt", header=F, fill=TRUE, sep=',', stringsAsFactors=F)

我希望筛选结果如下:

    V1 V2
1    T  T
2 <NA>    
3    D    
4 <NA>   
5 <NA>   
6    T   
7    P  B
8 <NA>   
9 <NA>

然而,它出现了:

    V1 
1    T 
2 <NA>    
3    D    
4 <NA>   
5 <NA>   
6    T   
7    P 
8 <NA>   
9 <NA> 

当每行中有多个sampleID(用逗号分隔)时,此代码有效 - 但不适用于单个字母。 “填充”是否适用于单个字母?愚蠢的问题,我知道。

1 个答案:

答案 0 :(得分:2)

所以这是一个解决方法:

url  <- "https://dl.dropboxusercontent.com/s/bjb241s16t63ev8/pred.txt?dl=1&token_hash=AAEBzfCGgoeHgNTvhMSVoZK6qRGrdwwuDZB3h8lWTZNtkA"
df.1 <- read.table(url,header=F,sep=",",fill=T,stringsAsFactors=F)
dim(df.1)
# [1] 149792      1     <-- 149,792 rows and ** 1 ** column

df.2 <- read.table(url,header=F,sep=",",fill=T,stringsAsFactors=F, 
                   col.names=c("V1","V2"))
dim(df.2)
# [1] 149633      2     <-- 149,633 rows and ** 2 ** columns

head(df.2[which(nchar(df.2$V2)>0),])
#      V1 V2
# 1000  T  T
# 2419  T  T
# 3507  T  T
# 3766  T  D
# 4308  T  D
# 4545  T  D

read.table(...)创建一个数据框,其中列数由前5行确定。由于您文件中的前5行只有1列,所以您得到的是这些。显然,通过指定sep=",",您强制read.table(...)添加&#34;额外&#34;数据为额外行

变通方法通过指定列名称(可以是任何内容)显式设置列数,只要length(col.names) = 2