【问题标题】:format a time series as dataframe with julian date将时间序列格式化为带有朱利安日期的数据框
【发布时间】:2015-06-08 13:22:36
【问题描述】:

我有一个时间序列 tt.txt 从 1998 年 5 月 1 日到 2012 年 10 月 31 日的每日数据在一列中,如下所示:

    v1
   296.172
   303.24
   303.891
   304.603
   304.207
   303.22
   303.137
   303.343
   304.203
   305.029
   305.099
   304.681
   304.32
   304.471
   305.022
   304.938
   304.298
   304.120

文本文件中的每个数字代表相应日期的最高温度(以开尔文为单位)。我想通过添加年份、jday 和数据的值将数据放在 3 列中,如下所示:

     year jday MAX_TEMP 
1    1959  325 11.7      
2    1959  326 15.6      
3    1959  327 14.4    

【问题讨论】:

    标签: r


    【解决方案1】:

    如果你有一个带日期的向量,我们可以将它转换为 'year' 和 'jday' by

    v1 <- c('May 1998 05', 'October 2012 10')
    v2 <- format(as.Date(v1, '%b %Y %d'), '%Y %j')
    df1 <- read.table(text=v2, header=FALSE, col.names=c('year', 'jday'))
    df1
    #  year jday
    #1 1998  125
    #2 2012  284
    

    从 '%Y %j' 转换回 'Date' 类

    df1$date <- as.Date(do.call(paste, df1[1:2]), '%Y %j')
    

    更新

    我们可以使用read.table 读取数据集。如果我们知道开始日期和结束日期,则使用 seq 创建日期序列,cbind 将“日期”的 format 更改为“年”和“朱利安日”后使用原始数据集。

    dat <- read.table('tt.txt', header=TRUE)
    date <- seq(as.Date('1998-05-01'), as.Date('2012-10-31'), by='day')
    dat2 <- cbind(read.table(text=format(date, '%Y %j'), 
                  col.names=c('year', 'jday')),MAX_TEMP=dat[1])
    

    【讨论】:

    • @user3290596 假设日期从'1998-05-01'开始到'2012-10-31'结束,我们可以用seq创建一个序列,改变format和cbind 与初始数据集
    • dat2 出现错误:dat2
    • @user3290596 创建的seq 具有特定的长度。如果您的数据(即 Max_temp)没有那么多元素,则会导致该错误。如果不提供太多详细信息,很难理解您在哪一天缺少 MAX_TEMP 的值
    【解决方案2】:

    您可以使用yday

    as.POSIXlt("8 Jun 15", format = "%d %b %y")$yday
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2012-02-02
      • 2019-01-23
      相关资源
      最近更新 更多