【问题标题】:How to skip comments line in data file I want to import, with R如何使用 R 跳过我要导入的数据文件中的注释行
【发布时间】:2013-07-05 09:22:09
【问题描述】:

我有很多字符串文件 (.str),我想在 R 中导入它们(循环文件)。 问题是第一行既不是列名也不是矩阵的开头。它是注释行。最后一行同上。 在这两行之间,站起来我要导入的矩阵.. 我该怎么做?

谢谢

【问题讨论】:

  • 欢迎来到 SO。请阅读本文以了解如何创建reproducible example。例如,在这种情况下,您应该添加文本的某些部分,然后您尝试了什么。
  • 它们之前是否有任何类型的评论字符?
  • 阅读?read.table。参数skipnrowcomment.char 可能与您相关。
  • 如果文件的结构不同,您可以随时使用readLines 读入,然后使用正则表达式函数删除不需要的行,然后再转换为您想要的数据结构。
  • @user2551551 但是如果 first 行是您要跳过的那一行,只需在 read.table 中使用 skip = 1 即可跳过第一行行并照常进行,例如read.table( "myfile.txt" , skip = 1 , header = TRUE )

标签: r matrix import line skip


【解决方案1】:

如果您想跳过文件中的前 行,可以按如下方式进行。使用readLines将文件读入字符向量,然后传递给read.csv

strs <- readLines("filename.csv")
dat <- read.csv(text=strs,             # read from an R object rather than a file
                skip=1,                # skip the first line
                nrows=length(strs) - 3 # skip the last line
                )

- 3 是因为数据的行数比文件中的文本行数少 3:开头跳过了 1 行,列标题跳过了 1 行,结尾跳过了 1 行。当然,您也可以忽略 nrows 参数,并在导入后从数据框中删除无意义的行。

【讨论】:

    【解决方案2】:

    您可以将 cmets 放在数据文件中的任何位置,就像将 cmets 放入 R 脚本一样。例如,如果我有这样的data.txt

    # comment 1
    str1
    str2
    # comment 2
    str3
    # comment 3
    str4
    str5# comment 4
    str6
    str7
    # comment 5
    

    那么你不需要做任何事情来跳过 cmets:

    > x<-read.table("data.txt", header=FALSE)
    > x
        V1
    1 str1
    2 str2
    3 str3
    4 str4
    5 str5
    6 str6
    7 str7
    >
    

    请注意,comment 4 不会被读取。您可以使用comment.char 选项更改评论字符#

    【讨论】:

      【解决方案3】:

      如果将 Hong Ooi 提供的 readLines 方法与负索引结合使用,则可以跳过文件中的任意行。这是一个示例,它跳过了文件中的第 2-5 行,该文件具有标题但有许多注释/元信息行:

      lines <- readLines('myfile.txt')
      mytable <- read.table(text = lines[-c(2:5)], sep = '\t', header = T)
      

      【讨论】:

      • 这不会跳过这些行。它读取所有行,然后删除其中一些行。如果文件很大,这是一个不好的方法。
      猜你喜欢
      • 1970-01-01
      • 2013-08-24
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多