【问题标题】:How to import a .tsv file如何导入 .tsv 文件
【发布时间】:2016-01-24 03:57:53
【问题描述】:

我需要读取 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'

我应该如何阅读它?

【问题讨论】:

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

标签: r import read.table readr


【解决方案1】:

应该这样做:

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

【讨论】:

  • 应该给出与报告相同的错误,第 1 行没有足够的元素
  • 我认为这里的反对票来得太早了,因为我们还没有任何实际数据可以用任何方法进行测试。
【解决方案2】:

使用包 data.table 中的 fread 将读取数据并跳过使用 read.table 时遇到的错误。

require(data.table)

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

【讨论】:

  • 为这个解决方案点赞,因为它可以处理大型数据表,避免 ShinyUI 网页上的会话超时
【解决方案3】:

您可以将数据视为 csv,并指定制表符分隔。

read.csv("drug_info.tsv", sep = "\t")

【讨论】:

    【解决方案4】:

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

     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)
      

      【讨论】:

        【解决方案6】:

        utils::read.delim() 最常用于这种情况,如果您不想安装其他库。示例代码可能类似于:

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

        或者更友好的 io 函数可以从 readr library 获得,read_tsv named function 可以直接获得:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-04
          • 2014-07-21
          • 2012-12-18
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多