涂抹并润滑

时间:2016-07-04 08:28:26

标签: r date lubridate

我有日期转换的问题。如果我在申请中使用ymd,它会返回一个数字,或者如果我只使用ymd,它会起作用。 有人会有任何想法吗?

library(lubridate)
a <- data.frame(dates1=c("2011-01-01",'2011-02-01','2011-03-01'),
            dates2=c("2013-01-01",'2013-02-01','2013-03-01'))
apply(a, 2, FUN = function(x) ymd(x))

     dates1     dates2
[1,] 1293840000 1356998400
[2,] 1296518400 1359676800
[3,] 1298937600 1362096000

ymd(a$dates1)

[1] "2011-01-01 UTC" "2011-02-01 UTC" "2011-03-01 UTC"

ymd(a$dates2)

[1] "2013-01-01 UTC" "2013-02-01 UTC" "2013-03-01 UTC"

3 个答案:

答案 0 :(得分:3)

使用lapply()

lapply(a, function(x) ymd(x))

<强>更新/释

apply()文档声明:

  

在所有情况下,在设置维度之前,as.vector会将结果强制转换为其中一个基本矢量类型,以便(例如)因子结果将被强制转换为字符数组。

正如J.Ulrich在对this answer的评论中所述,“日期不是严格的向量”。 lapply()apply()非常相似,但它会返回一个列表而不是一个向量。因此它有能力处理日期。

答案 1 :(得分:3)

apply尝试使用as.matrix尝试简化它,如果输入 X 是二维的,请参阅此示例:

as.matrix(ymd("2013-01-01"))
      [,1]
[1,] 15706

?apply

  

<强>详情
  如果X不是数组,而是具有非null dim的类的对象   值(例如数据框)应用尝试将其强制转换为数组   如果它是二维的(例如,数据帧)或通过,则通过as.matrix   as.array。

答案 2 :(得分:2)

以下是使用name

的选项
subName