合并列表将日期格式更改为数字

时间:2017-09-11 11:27:51

标签: r list merge data-manipulation

我有长度为18的列表,当我尝试合并这些列表以创建数据框时,它会将日期格式更改为数字。

我使用了以下语法

forecast_data = do.call(rbind, datalist)

当我执行上面的代码时,有3个日期列全部更改为数字。

是否有一种方法可以在合并列表时将日期列的类型保留为日期。请指教。

请参阅下面的样本列表和我希望从列表中获得的结果

datalist = list()

l <- data.frame(ID=c(1), Date=as.Date("2017-07-02"), Prediction=c(66))
l <- as.list(l)
datalist[[1]] <- (l)

l <- data.frame(ID=c(1), Date=as.Date("2017-07-09"), Prediction=c(70))
l <- as.list(l)
datalist[[2]] <- (l)

l <- data.frame(ID=c(1), Date=as.Date("2017-07-16"), Prediction=c(77))
l <- as.list(l)
datalist[[3]] <- (l)


result <- data.frame(ID=c(1,1,1), Date=c("2017-07-02","2017-07-09","2017-07-16"), Prediction=c(66,70,77))

2 个答案:

答案 0 :(得分:2)

您可以使用rbindlist

中的data.table
library(data.table)
ans <- rbindlist(datalist)

输出

   ID       Date Prediction
1:  1 2017-07-02         66
2:  1 2017-07-09         70
3:  1 2017-07-16         77

str(ans)

Classes ‘data.table’ and 'data.frame':  3 obs. of  3 variables:
 $ ID        : num  1 1 1
 $ Date      : Date, format: "2017-07-02" "2017-07-09" ...
 $ Prediction: num  66 70 77

数据

datalist <- list(structure(list(ID = 1, Date = structure(17349, class = "Date"), 
Prediction = 66), .Names = c("ID", "Date", "Prediction")), 
structure(list(ID = 1, Date = structure(17356, class = "Date"), 
    Prediction = 70), .Names = c("ID", "Date", "Prediction"
)), structure(list(ID = 1, Date = structure(17363, class = "Date"), 
    Prediction = 77), .Names = c("ID", "Date", "Prediction"
)))

我已修改您的帖子,以便列表中的日期为Date格式

答案 1 :(得分:1)

使用基数R,您可以使用Reducedo.call

  Reduce(rbind,Map(do.call,c(cbind.data.frame),datalist))
   ID       Date Prediction
 1  1 2017-07-02         66
 2  1 2017-07-09         70
 3  1 2017-07-16         77

  do.call(rbind,Map(do.call,c(cbind.data.frame),datalist))
   ID       Date Prediction
 1  1 2017-07-02         66
 2  1 2017-07-09         70
 3  1 2017-07-16         77

结果类:

  str(do.call(rbind,Map(do.call,c(cbind.data.frame),datalist)))
 'data.frame':  3 obs. of  3 variables:
  $ ID        : num  1 1 1
  $ Date      : Date, format: "2017-07-02" "2017-07-09" ...
  $ Prediction: num  66 70 77