首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Unix中创建的文件读取到Windows 10计算机上的R中?

如何将Unix中创建的文件读取到Windows 10计算机上的R中?
EN

Stack Overflow用户
提问于 2019-02-08 07:01:58
回答 1查看 76关注 0票数 0

我从网上下载并解压了一个在Unix系统上创建的文件。我需要将它读入R中的tibble,并使用正确的变量名。

代码语言:javascript
复制
UKBPP_outcome <- read_tsv ("3_UK_Biobank_parental_17May2018")

这给了我一个只有一个变量的文件,700万条记录。我感兴趣的所有字段都被串在一起,由空格分隔。实际上,这个文件中有9个变量,而不是1个。

代码语言:javascript
复制
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。取而代之的是,我得到了一个这样的变量:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-02-08 07:28:05

data.tablefread函数非常适合这一点,特别是考虑到数据的大小。

如果我们下载有问题的文件,我们可以首先在R中解压缩它,然后使用data.table读取它

代码语言:javascript
复制
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,我们会看到:

代码语言:javascript
复制
Detecting sep automatically ...
  sep=' '  with 100 lines of 9 fields using quote rule 0

所以有问题的文件是用空格分隔的。

出于好奇,我还运行了一个基准测试,看看fread在处理数据大小方面有多好。我第一次尝试在没有指定colClasses的情况下运行read.table,在观察了几分钟鼠标滚轮旋转后,我放弃了。我返回并添加了skip = 1colClasses向量:

代码语言:javascript
复制
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倍。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54583662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档