R: Проблемы чтения в файлах с разделителями табуляции - PullRequest
0 голосов
/ 18 октября 2018

Заранее извиняюсь за простой вопрос.У меня проблемы с чтением файла с разделителями табуляции.R утверждает, что в строке 164 отсутствуют элементы, но я не понимаю, почему.Когда я копирую и вставляю в Excel, он отлично разделяется.

Данные:

  temp <- tempfile()
  download.file("https://www.fda.gov/downloads/Drugs/InformationOnDrugs/UCM527389.zip",temp)

Я пробовал

df <- read.table(unz(temp, "Products.txt"), sep="\t",header= TRUE) 

и

 df <- read.table(unz(temp, "Products.txt"), sep="\t",fill=TRUE, header= TRUE) 

, который запутался в одной строке.

1 Ответ

0 голосов
/ 18 октября 2018

Рассмотрим read.delim, который, подобно read.csv, входит в число оболочек для более общей функции read.table во встроенном пакете utils.

Появляется более длинные поля, DrugName и ActiveIngredient , есть проблемы с кавычками и пустыми строками, требующие корректировки аргументов fill , quote , comment_char .

df <- read.delim(unz(temp, "Products.txt"), sep="\t", header= TRUE) 

С выходом структуры:

str(df)
# 'data.frame': 37850 obs. of  8 variables:
#  $ ApplNo           : int  4 159 552 552 552 552 552 552 552 552 ...
#  $ ProductNo        : num  4 1 1 2 3 4 5 7 8 9 ...
#  $ Form             : Factor w/ 348 levels "AEROSOL, FOAM;RECTAL",..: 203 331 121 121 121 121 121 121 121 121 ...
#  $ Strength         : Factor w/ 4065 levels ""," EQ 5MG BASE/ML",..: 525 2491 1453 2240 2447 538 654 670 538 2447 ...
#  $ ReferenceDrug    : int  0 0 0 0 0 0 0 0 0 0 ...
#  $ DrugName         : Factor w/ 7161 levels "8-HOUR BAYER",..: 4773 6039 3547 3547 3547 3547 3547 3546 2796 2796 ...
#  $ ActiveIngredient : Factor w/ 2735 levels "ABACAVIR SULFATE",..: 1372 2446 1305 1305 1305 1305 1305 1305 1305 1305 ...
#  $ ReferenceStandard: int  0 0 0 0 0 0 0 0 0 0 ...

Эквивалентно read.table, настройка значений по умолчанию в аргументах:

df <- read.table(unz(temp, "Products.txt"), sep="\t", quote = "\"", fill = TRUE,
                 comment.char = "", header= TRUE) 

Для сравнения:

df1 <- read.table(unz(temp, "Products.txt"), sep="\t", quote = "\"", fill = TRUE, 
                  comment.char = "", header= TRUE) 
df2 <- read.delim(unz(temp, "Products.txt"), sep="\t", header= TRUE) 

all.equal(df1, df2)
# [1] TRUE

identical(df1, df2)
# [1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...