【问题标题】:Reading 3-dimensional datasets into R将 3 维数据集读入 R
【发布时间】:2011-03-29 23:44:59
【问题描述】:

Gnuplot 允许使用三个维度的数据集,它们是一组由空行分隔的表格,例如:

54.32,16.17,7.42,4.28,3.09,2.11,1.66,1.22,0.99,0.82,7.9

54.63,15.50,8.53,5.31,3.75,1.66,1.14,0.83,0.94,0.52,7.18
56.49,16.67,6.38,3.69,2.80,1.45,1.12,0.89,1.12,0.89,8.50
56.35,16.26,7.76,3.57,2.62,1.89,1.05,1.15,0.63,1.05,7.66

53.79,16.19,6.47,4.57,3.47,1.74,1.95,1.37,1.00,0.74,8.73
55.63,16.28,7.87,3.72,2.48,1.99,1.40,1.19,0.70,1.08,7.65
54.09,15.76,7.96,4.70,2.77,2.21,1.27,1.27,0.66,1.11,8.19
53.79,16.19,6.47,4.57,3.47,1.74,1.95,1.37,1.00,0.74,8.73

...

例如,这是为了显示数据集随着时间的推移而演变。在 Gnuplot 中,您可以选择要用于给定绘图的数据集(使用它的索引和关键字,呵呵,index IIRC)。

我一直在使用 R,到目前为止,我一直在使用扫描/表格功能一次手动为其提供一个数据集。我没有一个包含所有数据集的大文件,而是每个数据集有一个文件,并且我一次创建一个表。

是否有一种(内置的或非常简单的)方法可以一次读取所有聚合数据集,以我会的方式

dataset <- neatInput("my-aggregate-data")
dataset[1]    # first data set
dataset[2]    # second data set
...

还是类似的?

【问题讨论】:

    标签: r statistics dataset gnuplot


    【解决方案1】:

    我设法将代码合并为两行,FWIW :)

    check <- read.csv("data.csv", blank.lines.skip = F, head = F)
    
    split(check, (cumsum(is.na(check[,1]))+1) * !is.na(check[,1]))
    ## $`0`
    ##   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
    ## 2 NA NA NA NA NA NA NA NA NA  NA  NA
    ## 6 NA NA NA NA NA NA NA NA NA  NA  NA
    
    ## $`1`
    ##      V1    V2   V3   V4   V5   V6   V7   V8   V9  V10 V11
    ## 1 54.32 16.17 7.42 4.28 3.09 2.11 1.66 1.22 0.99 0.82 7.9
    
    ## $`2`
    ##      V1    V2   V3   V4   V5   V6   V7   V8   V9  V10  V11
    ## 3 54.63 15.50 8.53 5.31 3.75 1.66 1.14 0.83 0.94 0.52 7.18
    ## 4 56.49 16.67 6.38 3.69 2.80 1.45 1.12 0.89 1.12 0.89 8.50
    ## 5 56.35 16.26 7.76 3.57 2.62 1.89 1.05 1.15 0.63 1.05 7.66
    
    ## $`3`
    ##       V1    V2   V3   V4   V5   V6   V7   V8   V9  V10  V11
    ## 7  53.79 16.19 6.47 4.57 3.47 1.74 1.95 1.37 1.00 0.74 8.73
    ## 8  55.63 16.28 7.87 3.72 2.48 1.99 1.40 1.19 0.70 1.08 7.65
    ## 9  54.09 15.76 7.96 4.70 2.77 2.21 1.27 1.27 0.66 1.11 8.19
    ## 10 53.79 16.19 6.47 4.57 3.47 1.74 1.95 1.37 1.00 0.74 8.73
    

    【讨论】:

      【解决方案2】:

      如果您的第三维度是时间,那么通常最好使用专门的时间/日期对象。 R 中最常用的通用时间序列包包括自定义函数来做你想做的事。例如,以几个月到几年的时间汇总一些数据:

      > data(AirPassengers); AP = AirPassengers
      > # import the package xts, which will 'auto-import' its sole dependency, 
      > # the package 'zoo'
      > library(xts)    
      
      # AP is an R time series whose data points are in months
      > class(AP)
      [1] "ts"
      > start(AP)
      [1] 1949    1
      > end(AP)
      [1] 1960   12
      > frequency(AP)
      [1] 12
      > AP[1:3]
      [1] 112 118 132
      
      > # step 1: convert ts object to an xts object
      > X = as.xts(AP)
      > class(X)
      [1] "xts" "zoo"
      > # step 2: create index of endpoints to pass to the aggregator function
      > np = endpoints(X, on="years")
      > # step 3: call the aggregator function
      > X2 = period.apply(X, INDEX=np, FUN=sum)
      > X2[1:3]
               [,1]
      Dec 1949 1520
      Dec 1950 1676
      Dec 1951 2042
      > # 'X2' is in years (each value is about 12X higher than the first three values for
      > # AP above
      

      【讨论】:

        猜你喜欢
        • 2020-09-23
        • 2020-12-08
        • 2018-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        相关资源
        最近更新 更多