【问题标题】:R "Multiple data sets per file"R“每个文件多个数据集”
【发布时间】:2012-04-24 00:09:50
【问题描述】:

我有一个如下数据集:

0 0 0 0 0 0 54077 184965 81.25 54266 184776 81.25 65130 199986 82.1705426356589 65513 199600 82.1705426356589

这些数据由 2 个空行分隔。因此,当我使用 gnuplot 绘制点图时,他们会认为这些是一个文件中的单独数据。如何在 R 中做同样的事情?因为对于每个这样的数据集,我将有两个点通过线连接。 (例如,[5077,184965] 连接到 [54266, 199600])

非常感谢你!

【问题讨论】:

    标签: r dataset


    【解决方案1】:

    两个想法:

    1. 如果它们都采用相同的格式,则将 read.table/read.csvblank.lines.skip 参数设置为 FALSE,而不是默认的 TRUE。然后你会得到一个 data.frame,里面有你可以分割的空行。

    2. 如果它们的格式不同,那么您可以使用这些相同命令的skip 参数仅提取输入文件的某些行。

    【讨论】:

      【解决方案2】:

      最坏的情况,你必须使用 n=1 的 readLines 一次读取一行,用 strsplit 拆分,并将每个数据集收集到一个列表中,在开始一个新元素之前寻找分隔符(空白行)你的名单。

      但你只需要在 gsk3 的解决方案失败的情况下这样做,因为你的数据集有点非结构化......

      【讨论】:

        【解决方案3】:

        也可以将文件读入内存,

        > buffer <- readLines ("tmp/file")
        > buffer
         [1] "0 0 0"                         "0 0 0"                        
         [3] ""                              ""                             
         [5] "54077 184965 81.25"            "54266 184776 81.25"           
         [7] ""                              ""                             
         [9] "65130 199986 82.1705426356589" "65513 199600 82.1705426356589"
        

        删除或处理(例如导出测量编号、数据集名称……)所有不属于包含数据表的文件部分的所有行:

        > buffer <- buffer [nzchar (buffer) > 0L]
        > buffer
        [1] "0 0 0"                         "0 0 0"                        
        [3] "54077 184965 81.25"            "54266 184776 81.25"           
        [5] "65130 199986 82.1705426356589" "65513 199600 82.1705426356589"
        

        最后在修改后的缓冲区上使用read.table

        > read.table (textConnection (buffer))
             V1     V2       V3
        1     0      0  0.00000
        2     0      0  0.00000
        3 54077 184965 81.25000
        4 54266 184776 81.25000
        5 65130 199986 82.17054
        6 65513 199600 82.17054
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-16
          • 1970-01-01
          • 2015-01-08
          • 2020-11-07
          • 1970-01-01
          • 2020-07-16
          • 2012-06-13
          • 1970-01-01
          相关资源
          最近更新 更多