将数字转换为日期

Transforming Numeric into Date

我的数据采用这种格式

ID     Date       Order
1   12/12/2015      1
1   12/13/2015      2
1   12/14/2015      3
1   12/15/2015      4
2   12/12/2015      1
2   12/13/2015      2
2   12/14/2015      3
2   12/15/2015      4

现在,我正在使用 tidyr 将数据转换为宽格式。所以新数据看起来像这样。

ID   Date_1     Date_2       Date_3    Date_4
1  12/12/2015 12/13/2015  12/14/2015 12/15/2015
2  12/12/2015 12/13/2015  12/14/2015 12/15/2015

我遇到的问题是在转换时,Date_1、Date_4 正在变成数字。当我尝试使用以下代码将它们转换为字符时,出现以下错误。

df[, 2:5] <- lapply(df[,2:5], as.Date)

错误:

Error in as.Date.numeric(x) : 'origin' must be supplied

我的问题是如何将数字数据转换成日期格式。

谢谢!

我们需要使用正确的format将其转换为Dateclass.

df[2:5] <- lapply(df[2:5], as.Date, format = "%m/%d/%Y")
df
#  ID     Date_1     Date_2     Date_3     Date_4
#1  1 2015-12-12 2015-12-13 2015-12-14 2015-12-15
#2  2 2015-12-12 2015-12-13 2015-12-14 2015-12-15

如果“日期”列已经采用 "%Y-%m-%d" 格式,则我们不必指定格式。


不清楚我们如何在重塑时获得数字“日期”列

library(tidyr)
OrigDf %>% 
     mutate(Order = paste0("Date", Order)) %>% 
     spread(Order, Date)
#  ID      Date1      Date2      Date3      Date4
#1  1 12/12/2015 12/13/2015 12/14/2015 12/15/2015
#2  2 12/12/2015 12/13/2015 12/14/2015 12/15/2015

注意:即使是 factor 列,上面的输出也保持不变。

数据

df <- structure(list(ID = 1:2, Date_1 = c("12/12/2015", "12/12/2015"
), Date_2 = c("12/13/2015", "12/13/2015"), Date_3 = c("12/14/2015", 
"12/14/2015"), Date_4 = c("12/15/2015", "12/15/2015")), .Names = c("ID", 
"Date_1", "Date_2", "Date_3", "Date_4"), class = "data.frame",
 row.names = c(NA, -2L))


Origdf <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
 Date = c("12/12/2015", 
 "12/13/2015", "12/14/2015", "12/15/2015", "12/12/2015", "12/13/2015", 
 "12/14/2015", "12/15/2015"), Order = c(1L, 2L, 3L, 4L, 1L, 2L, 
 3L, 4L)), .Names = c("ID", "Date", "Order"), class = "data.frame",
 row.names = c(NA, -8L))