Как импортировать файл .tsv

Мне нужно прочитать таблицу, которая представляет собой файл .tsv в R.

введите описание изображения здесь

test <- read.table(file='drug_info.tsv')
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   line 1 did not have 10 elements
test <- read.table(file='drug_info.tsv', )
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   line 1 did not have 10 elements
scan("drug_info.tsv")
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   scan() expected 'a real', got 'ChallengeName'
scan(file = "drug_info.tsv")
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   scan() expected 'a real', got 'ChallengeName'

Как мне это прочитать?


person Andrew Voronkov    schedule 24.10.2015    source источник
comment
Пожалуйста, скопируйте/вставьте первые 5 строк файла в свой вопрос и удалите изображение.   -  person Rich Scriven    schedule 24.10.2015
comment
почти read.delim с настройками по умолчанию   -  person rawr    schedule 24.10.2015
comment
read.table по умолчанию используется разделитель пробелами (обычно это означает пробел или табуляцию). Если у вас есть пробелы, вы можете явно установить разделитель в виде табуляции с помощью sep="\t". read.table работает с допустимыми входными файлами, поэтому, если есть проблема с импортом ваших данных, это связано с файлом, а не с функцией. Поэтому, чтобы помочь вам, нам нужно, чтобы вы предоставили образец файла, который вы на самом деле пытаетесь импортировать, а не изображение данных в какой-либо другой программе.   -  person MrFlick    schedule 24.10.2015


Ответы (6)


Это должно сделать это:

read.table(file = 'drug_info.tsv', sep = '\t', header = TRUE)
person Robert    schedule 24.10.2015
comment
Это должно дать ту же ошибку, что и сообщалось, в строке 1 недостаточно элементов. - person Robert Hijmans; 24.10.2015
comment
Я думаю, что голосование против было сделано немного преждевременно, поскольку у нас пока нет реальных данных для проверки каким-либо методом. - person Rich Scriven; 24.10.2015

Использование fread из пакета data.table прочитает данные и пропустит ошибку, которую вы получаете при использовании read.table.

require(data.table)

data<-as.data.frame(fread("drug_info.tsv"))
person TBhavnani    schedule 12.03.2018
comment
Недурно для этого решения, поскольку оно может обрабатывать большие таблицы данных, избегая времени ожидания сеанса на веб-странице ShinyUI. - person Stone; 29.01.2019

Вы можете обрабатывать данные как CSV и указать разделитель табуляции.

read.csv("drug_info.tsv", sep = "\t")
person Sam Old    schedule 21.02.2019

Предполагая, что только первая строка не имеет нужного количества элементов и что это строка имен столбцов. Пропустить первую строку:

 d <- read.table('drug_info.tsv', skip=1)

Теперь прочитайте это

 first <- readLines('drug_info.tsv', n=1)

Осмотрите его, исправьте так, чтобы количество элементов соответствовало d, а затем

 colnames(d) <- first

Если это не работает, вы можете сделать

 x <- readLines('drug_info.tsv')  

и такая диагностика:

 sapply(x, length)
person Robert Hijmans    schedule 24.10.2015

Вам нужно включить fill = TRUE.

test <- read.table(file='drug_info.tsv', sep = '\t', header = TRUE, fill = TRUE)
person woutcault    schedule 15.11.2019

utils::read.delim() чаще всего используется в том случае, если вы не хотите устанавливать другую библиотеку. Пример кода может быть примерно таким:

test <- read.delim(file='drug_info.tsv')

или гораздо более дружественные функции ввода-вывода могут быть доступны на readr library, где read_tsv названная функция доступна напрямую:

test <- readr::read_tsv('drug_info.tsv')
person 千木郷    schedule 26.01.2019