R中的日期转换

时间:2018-08-14 20:14:50

标签: r date

在包含从Excel文件中以R粘贴的数据的数据框中,日期格式(以第一行和第11列中的元素为例)如下:

data_agg[[1,11]]
[1] "2018-03-16 UTC"

我确实想将日期格式转换为“ 2018-03-16”而不使用UTC。因此,我编写了以下代码来实现这一目标:

as.Date(data_agg[[1,11]])
[1] "2018-03-16"

截至目前,这已经很完美了。我想将此新的日期格式分配给数据框中的原始位置。所以我有以下代码:

> data_agg[[1,11]] <- as.Date(data_agg[[1,11]])
> data_agg[[1,11]]
[1] "1970-01-01 04:53:26 UTC"

从上面可以看到,在转换日期格式并重新分配后,元素值以某种方式更改为“ 1970-01-01 04:53:26 UTC”。谁能阐明我的代码的状况吗?谢谢!

1 个答案:

答案 0 :(得分:0)

在R中,日期和时间仅是数字。 R知道将它们解释为日期/时间的方式是通过附加到变量的属性来实现:

> d <- Sys.Date()
> attributes(d)
$class
[1] "Date"

现在,变得很时髦的地方是,当您将这些对象放入向量中时,class属性将附加到向量本身,而不是向量的每个元素。这意味着在同一向量中不能包含不同类型的数值。

如果要将数据框中列的所有元素替换为等效日期,可以一次转换并分配整列:

> data_agg[,11] <- as.Date(data_agg[,11])

编辑:如果您真正想要的是在向量中包含一堆代表日期的字符串以及其他字符串,那么只需将您的字符串转换为日期,然后再次返回即可:

> data_agg[[1,11]] <- as.character(as.Date(data_agg[[1,11]]))

或者,如果字符串" UTC"没有出现在其他任何字符串中,则可以使用直接字符串替换功能,例如@shum建议。