我从网上下载并解压了一个在Unix系统上创建的文件。我需要将它读入R中的tibble,并使用正确的变量名。
UKBPP_outcome <- read_tsv ("3_UK_Biobank_parental_17May2018")这给了我一个只有一个变量的文件,700万条记录。我感兴趣的所有字段都被串在一起,由空格分隔。实际上,这个文件中有9个变量,而不是1个。
UKBPP_outcome <- read_tsv ("3_UK_Biobank_parental_17May2018")该文件位于http://www.ccace.ed.ac.uk/node/335上,标题为Marioni_阿尔茨海默氏症_疾病_TP_208.zip警告:它有超过7,000,000条记录。
我想要一个有9个可变列的tibble。取而代之的是,我得到了一个这样的变量:
SNP A1 A2 BETA SE P DIR CHR BP
<chr>
1 1:101166253_TG_T T TG -0.0076 0.0114 0.5036 -+ 1 101166253发布于 2019-02-08 07:28:05
data.table的fread函数非常适合这一点,特别是考虑到数据的大小。
如果我们下载有问题的文件,我们可以首先在R中解压缩它,然后使用data.table读取它
library(data.table)
file <- unzip("./UKB_AD_sumstats_17May2018.zip")
f1 <- fread(file[2])
SNP A1 A2 BETA SE P DIR CHR BP
1: 1:101166253_TG_T T TG -0.0076 0.0114 0.50360 -+ 1 101166253
2: 1:102884223_A_G A G -0.0037 0.0102 0.71920 -- 1 102884223
3: 1:105351556_C_T T C -0.0034 0.0099 0.72850 -+ 1 105351556
4: 1:105412363_T_C T C 0.0115 0.0105 0.27400 +- 1 105412363
5: 1:105413338_A_G A G 0.0083 0.0099 0.40350 ++ 1 105413338
---
7795601: rs9999993 A T 0.0050 0.0100 0.62050 ++ 4 98562671
7795602: rs9999995 A G -0.0012 0.0102 0.90980 -+ 4 185171608
7795603: rs9999996 A C -0.0257 0.0104 0.01376 -- 4 69782467
7795604: rs9999997 A G -0.0057 0.0100 0.56740 +- 4 163870478
7795605: rs9999998 T C -0.0004 0.0102 0.96540 -+ 4 117161848如果我们用verbose = TRUE运行fread,我们会看到:
Detecting sep automatically ...
sep=' ' with 100 lines of 9 fields using quote rule 0所以有问题的文件是用空格分隔的。
出于好奇,我还运行了一个基准测试,看看fread在处理数据大小方面有多好。我第一次尝试在没有指定colClasses的情况下运行read.table,在观察了几分钟鼠标滚轮旋转后,我放弃了。我返回并添加了skip = 1和colClasses向量:
library(rbenchmark)
benchmark( "fread" = { f1 <- fread(file)},
"read.table" = { f2 <- read.table(file, sep = " ", colClasses = c("character", "character", "character", "numeric", "numeric", "numeric", "character", "integer", "integer"), skip = 1)},
replications =1)
test replications elapsed relative user.self sys.self user.child sys.child
1 fread 1 2.04 1.000 3.64 0.18 NA NA
2 read.table 1 17.20 8.431 16.03 1.13 NA NA对于这个数据集,fread大约比read.table快8倍。
https://stackoverflow.com/questions/54583662
复制相似问题