2015-06-26 32 views
2

我有LD数据,有时候是原始输出文件PLINK(注意空格 - 用于输出漂亮,注意前导和尾随空格):使用相同的命令快速读取不同类型的数据,更好的分离器猜测

write.table(read.table(text=" 
CHR_A  BP_A   SNP_A CHR_B   BP_B   SNP_B   R2 
1 154834183  rs1218582  1 154794318  rs9970364 0.0929391 
1 154834183  rs1218582  1 154795033  rs56744813  0.10075 
1 154834183  rs1218582  1 154797272  rs16836414  0.106455 
1 154834183  rs1218582  1 154798550 rs200576863 0.0916789 
1 154834183  rs1218582  1 154802379  rs11264270  0.176911 ",sep="x"), 
      "Type1.txt",col.names=FALSE,row.names=FALSE,quote=FALSE) 

还是很好的制表符分隔的文件:

write.table(read.table(text=" 
CHR_A BP_A SNP_A CHR_B BP_B SNP_B R2 
1 154834183 rs1218582 1 154794318 rs9970364 0.0929391 
1 154834183 rs1218582 1 154795033 rs56744813 0.10075 
1 154834183 rs1218582 1 154797272 rs16836414 0.106455 
1 154834183 rs1218582 1 154798550 rs200576863 0.0916789 
1 154834183 rs1218582 1 154802379 rs11264270 0.176911", sep=" "), 
      "Type2.txt",col.names=FALSE,row.names=FALSE,quote=FALSE,sep="\t") 

read.csv适用于这两种类型的数据:

read.csv("Type1.txt", sep="") 
read.csv("Type2.txt", sep="") 

FREAD仅适用于类型2:

fread("Type1.txt") 
fread("Type2.txt") 

文件很大,有几百万行,因此不能使用read.csv选项。有没有办法让fread猜想更好?其他包装/功能建议?

我可以使用readLines然后猜测文件的类型,或使用系统调用然后fread整理文件,但这会增加我试图避免的开销。

编辑: SessionInfo

R version 3.2.0 (2015-04-16) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 
+0

另一个问题,我注意到'read.csv/read.table'工作的'fread'失败。你在使用Linux吗? – akrun

+0

@akrun看编辑,我在窗户上。你是否暗示我不会在linux上遇到这个问题? – zx8754

+1

我只是说用'awk'通过管道工作。即''fread(“awk'{$ 1 = $ 1} 1'Type1.txt”)' – akrun

回答

1

修正了devel版本v1.9.5。无论是使用devel的(/升级)或等待一段时间它打CRAN为v1.9.6:

require(data.table) # v1.9.5+ 
ans <- fread("Type1.txt") 
# CHR_A  BP_A  SNP_A CHR_B  BP_B  SNP_B  R2 
# 1:  1 154834183 rs1218582  1 154794318 rs9970364 0.0929391 
# 2:  1 154834183 rs1218582  1 154795033 rs56744813 0.1007500 
# 3:  1 154834183 rs1218582  1 154797272 rs16836414 0.1064550 
# 4:  1 154834183 rs1218582  1 154798550 rs200576863 0.0916789 
# 5:  1 154834183 rs1218582  1 154802379 rs11264270 0.1769110 

fread()已获得strip.white(默认值= TRUE)之中其他参数/​​ bug修复。请参阅项目页面上的README文件以获取更多信息。


类型也被正确识别。

sapply(ans, class) 
#  CHR_A  BP_A  SNP_A  CHR_B  BP_B  SNP_B   R2 
# "integer" "integer" "character" "integer" "integer" "character" "numeric" 
0

你可以尝试包readr。可在Cran或github

阅读小插曲,如果这会帮助你。我发现它正确读取大多数csv,包括日期和不需要指定stringsAsFactors = False。

但做阅读用fread()

+0

“fread()通过自动猜测分隔符来保存你的工作,文件是否有标题,默认跳过多少行以及Readr **强制你提供这些参数**” - 我想避免提供分隔符,并且需要函数来正确地猜测它。 – zx8754

2

我不认为fread有能力本身比较。然而,系统命令选项会起作用,额外的复制成本通常非常值得:

fread("powershell \"cat Type1.txt | % { $_ -replace ' +',',' } | % { $_ -replace '^,|,$','' }\"") 
# CHR_A  BP_A  SNP_A CHR_B  BP_B  SNP_B  R2 
#1:  1 154834183 rs1218582  1 154794318 rs9970364 0.0929391 
#2:  1 154834183 rs1218582  1 154795033 rs56744813 0.1007500 
#3:  1 154834183 rs1218582  1 154797272 rs16836414 0.1064550 
#4:  1 154834183 rs1218582  1 154798550 rs200576863 0.0916789 
#5:  1 154834183 rs1218582  1 154802379 rs11264270 0.1769110 
相关问题