【问题标题】:Vectorized Data Frame creation?矢量化数据框创建?
【发布时间】:2014-02-13 08:02:59
【问题描述】:

我想创建一个 data.frame(我知道矩阵会更快,但我需要一个 data.frame)但它需要的时间太长(超过 30 分钟)。我确信有比我已经尝试过的更好的方法。

我有一个大对象(好的,在 read.csv() 之前磁盘上没有那么大 ~=100MB 大小),就像:

           Date    City V3 V4
1    2008-12-30 NewYork 15 54
2    2008-12-31 NewYork 16 34
[...]
4001 2008-12-30 London  12 12
4002 2008-12-31 London  16 44
[...]
9001 2008-12-30 Madrid  26 54
9002 2008-12-31 Madrid  64 23

...想象一下很多城市(超过 500 个)和很多日期(20 年的每日数据,但有时在不规则的时间序列中(也就是说,马德里可能是唯一一个对 2001- 进行观测的城市) 01-01))。

我想要的是将它们排列在一个 data.frame 中,这样行名称将是日期,列名称将是城市名称,如下所示:

            NewYorkV3  LondonV3  MadridV3
2008-12-30         15        12        26
2008-12-31         16        16        64

我尝试过的(试图隐藏最终对象的增长)是:

uniqs <- unique(city.data[ ,2])

city.list <- vector('list', length(uniqs))

for (i in 1:length(uniqs)) {
city.list[[i]] <- subset(city.data, City==as.character(uniqs[i]))[ ,3] 
}

city.df <- do.call('cbind', city.list)

我确信有更有效的方法,但它是什么?

我可以将对象加载为 xts 吗?如何?我得到了我无法理解的错误...... 日期的列是否可以具有相同的值?

我可以熔化并重塑物体吗?如何? (再次出错)

谢谢!

【问题讨论】:

    标签: r vectorization


    【解决方案1】:

    您可能还对使用data.table 和扩展reshape2dcast.data.table 感兴趣

    这需要 data.table 版本 1.8.11(来自 R-forge)

    library(reshape2)
    library(data.table)
    
    dcast(x, Date ~ City, value.var = 'V3')
    

    【讨论】:

      【解决方案2】:

      reshape 适用于此:

      reshape(x, direction="wide", timevar="City", idvar="Date")
              Date V3.NewYork V4.NewYork V3.London V4.London V3.Madrid V4.Madrid
      1 2008-12-30         15         54        12        12        26        54
      2 2008-12-31         16         34        16        44        64        23
      

      【讨论】:

        【解决方案3】:

        你们的速度很快。

        我在使用日期列时遇到了一些问题,但我遇到了

        current.city.data$V1 <- as.character(current.city.data$V1)
        

        然后一切都解决了(无论如何阅读时也可以这样做)

        谢谢。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-01
          • 2016-08-30
          • 2015-01-22
          • 2018-02-05
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          • 1970-01-01
          相关资源
          最近更新 更多