Как мне прочитать файл, созданный в Unix, в R на компьютере с Windows 10? - PullRequest
0 голосов
/ 08 февраля 2019

Я скачал и разархивировал файл из Интернета, созданный в системе Unix.Мне нужно, чтобы он читался в таблицу в R с правильными именами переменных.

UKBPP_outcome <- read_tsv ("3_UK_Biobank_parental_17May2018")

Это дает мне файл с ОДНОЙ переменной, 7 миллионов записей.Все интересующие меня поля связаны друг с другом через пробел.Фактически в этом файле 9 переменных, а не одна.

UKBPP_outcome <- read_tsv ("3_UK_Biobank_parental_17May2018")

Файл находится в http://www.ccace.ed.ac.uk/node/335 под рубрикой Marioni_Alzheimer's_disease_TP_208.zip Предупреждение: это более 7 000 000 записей.

Я хочу тибль с 9 переменными столбцами.Вместо этого я получаю одну переменную, подобную этой:

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

1 Ответ

0 голосов
/ 08 февраля 2019

data.table Функция fread идеально подходит для этого, особенно с учетом размера данных.

Если мы загрузим рассматриваемый файл, мы можем сначала распаковать его в R, а затем прочитать егоin, используя 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

Если мы запустим fread с verbose = TRUE, мы увидим, что:

Detecting sep automatically ...
  sep=' '  with 100 lines of 9 fields using quote rule 0

Таким образом, рассматриваемый файл разделен пробелом.

Я также из любопытства выполнил тест, чтобы посмотреть, насколько лучше fread обработал размер данных.Сначала я попытался запустить read.table без указания colClasses, и после нескольких минут наблюдения за вращением колеса мыши я сдался.Я вернулся и добавил 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 примерно в 8 раз быстрее, чем read.table.

...