【问题标题】:How is it possible to expand a DATE column in R?如何在 R 中扩展 DATE 列?
【发布时间】:2020-09-21 05:57:16
【问题描述】:

我有一个包含几列的数据框,第一列是 DATE,其他列是不同站点的每日温度

     DATE         SITE1         SITE2                  
1    2017-01-01  0.101694912   0.15413890   
2    2017-01-02 -0.118305088  -0.06586110    
3    2017-01-03 -0.938305088  -0.88586110   
4    2017-01-04  1.501694912   1.55413890   
5    2017-01-05 -1.238305088  -1.18586110 
....

如何扩展数据框添加一个新的 DATE-HOUR 列(通过为不同站点的同一天的所有时间分配相同的温度值)?

    DATE           DATE-HOUR             SITE1         SITE2                    
1    2017-01-01   2017-01-01-1:00:00    0.101694912   0.15413890  
2    2017-01-01   2017-01-01-2:00:00    0.101694912   0.15413890    
3    2017-01-01   2017-01-01-3:00:00    0.101694912   0.15413890   
.... 

25   2017-01-02   2017-01-01:00:00     -0.118305088  -0.06586110   
26   2017-01-02   2017-01-02:00:00     -0.118305088  -0.06586110   
27   2017-01-02   2017-01-03:00:00     -0.118305088  -0.06586110    
..

【问题讨论】:

    标签: r date expand


    【解决方案1】:

    这有点冗长但有效,并且全部在基础 R 中完成:

    n <- nrow(df)
    df <- df[rep(seq(n), each = 24),]
    df$DATETIME <- as.POSIXct(df$DATE) + rep(0:23 * 3600, n)
    df <- df[c(1, 4, 2, 3)]
    df
    #>            DATE            DATETIME      SITE1      SITE2
    #> 1    2017-01-01 2017-01-01 00:00:00  0.1016949  0.1541389
    #> 1.1  2017-01-01 2017-01-01 01:00:00  0.1016949  0.1541389
    #> 1.2  2017-01-01 2017-01-01 02:00:00  0.1016949  0.1541389
    #> 1.3  2017-01-01 2017-01-01 03:00:00  0.1016949  0.1541389
    #> 1.4  2017-01-01 2017-01-01 04:00:00  0.1016949  0.1541389
    #> 1.5  2017-01-01 2017-01-01 05:00:00  0.1016949  0.1541389
    #> 1.6  2017-01-01 2017-01-01 06:00:00  0.1016949  0.1541389
    #> 1.7  2017-01-01 2017-01-01 07:00:00  0.1016949  0.1541389
    #> 1.8  2017-01-01 2017-01-01 08:00:00  0.1016949  0.1541389
    #> 1.9  2017-01-01 2017-01-01 09:00:00  0.1016949  0.1541389
    #> 1.10 2017-01-01 2017-01-01 10:00:00  0.1016949  0.1541389
    #> ...etc
    

    【讨论】:

      【解决方案2】:

      谢谢,艾伦, 如果我想添加一列 DATE_MINUTE,它是如何工作的?最好从 DATE 开始还是从 DATETIME 开始? 我试过这个字符串,但有一个我不明白的错误..

      来自具有 DATETIME 的数据框

      n <- nrow(df)
      df <- df[rep(seq(n), each = 60),]
      df$DATE_MINUTE <- as.POSIXct(df$DATETIME) + rep(0:59 * 60, n)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多