【问题标题】:sapply as.Date function to change the time variable from integer to date does not worksapply as.Date 函数将时间变量从整数更改为日期不起作用
【发布时间】:2014-11-30 04:23:54
【问题描述】:

我的问题是我有代表日期的三列整数。如果我使用

as.Date(x,origin="1970-01-01")

对于每个单独的列,它都有效。但是,如果我使用 sapply 作为

sapply(data,function(x)as.Date(x,origin="1970-01-01"))

它不起作用。关于如何有效解决问题的任何想法?可重现的代码如下

data=data.frame(time1=c(10189,11655,10914,12013,10934),time2=c(11758,10696,9784,10725,11225))
sapply(data,function(x)as.Date(x,origin="1970-01-01"))

结果完全没有变化。但是使用

as.Date(data$time1,origin="1970-01-01")

它可以工作。

【问题讨论】:

    标签: r date sapply as.date


    【解决方案1】:

    使用lapply:

    > lapply(data,function(x) as.Date(x,origin="1970-01-01"))
    $time1
    [1] "1997-11-24" "2001-11-29" "1999-11-19" "2002-11-22" "1999-12-09"
    
    $time2
    [1] "2002-03-12" "1999-04-15" "1996-10-15" "1999-05-14" "2000-09-25"
    

    如果您希望将输出作为数据框,您可以使用as.data.frame():

    > as.data.frame(lapply(data,function(x) as.Date(x,origin="1970-01-01")))
           time1      time2
    1 1997-11-24 2002-03-12
    2 2001-11-29 1999-04-15
    3 1999-11-19 1996-10-15
    4 2002-11-22 1999-05-14
    5 1999-12-09 2000-09-25
    

    【讨论】:

      【解决方案2】:

      您不需要将附加参数包装到函数中。 lapply(...) 也接受额外的 FUN 参数。因此...

      as.data.frame(lapply(data, as.Date, origin = "1970-01-01"))
      

      ...也可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-26
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        相关资源
        最近更新 更多