如何导入一个.tsv文件

40

我需要在R中读取一个 .tsv 文件作为表格。

图片描述

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'

我该如何阅读它?


3
请将文件的前5行复制/粘贴到您的问题中并删除图片。 - Rich Scriven
3
基本上就是使用默认设置的 read.delim - rawr
2
read.table 默认使用空格分隔符(即通常的空格或制表符)。如果有空格,您可以使用 sep="\t" 显式设置分隔符为制表符。read.table 适用于有效的输入文件,因此如果导入数据时出现问题,则是文件而不是函数的问题。因此,为了帮助您,我们需要您分享实际尝试导入的文件样本,而不是其他程序中数据的图片。 - MrFlick
6个回答

45
这应该可以解决问题:
read.table(file = 'drug_info.tsv', sep = '\t', header = TRUE)

3
应该会出现与报告相同的错误,第一行元素不足。 - Robert Hijmans
2
我认为这里的负评有点过早了,因为我们还没有任何实际数据可以用任何方法进行测试。 - Rich Scriven

16

使用data.table包中的fread函数可以读取数据,并且可以避免使用read.table时出现的错误。

require(data.table)

data<-as.data.frame(fread("drug_info.tsv"))

这个解决方案值得点赞,因为它可以处理大型数据表格,避免在ShinyUI网页上会话超时。 - Stone
这是一个非常棒的答案!谢谢! - stats_noob

14
您可以将数据视为CSV,并指定制表符分隔。
read.csv("drug_info.tsv", sep = "\t")

6

utils::read.delim()是在不想安装其他库的情况下最常用的方法。示例代码可能如下:

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

或者更友好的io函数可以从readr库中获得,其中一个名为read_tsv的函数可以直接使用:

test <- readr::read_tsv('drug_info.tsv')

5

假设只有第一行元素数量不正确,并且这是列名所在的行。跳过第一行:

 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)

5

您需要包含 fill = TRUE。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接