我有长度为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))
答案 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,您可以使用Reduce
或do.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