How to use rbind to merge data tables with POSIXct and Date column classes?

怎甘沉沦 提交于 2021-02-08 05:10:37

问题


I would like to merge two data tables, but one of them has column ddate with POSIXct class and another one has column ddate with Date class.

I would expect result data table to has POSIXct class, but the actual result depends on sequence of arguments passed to rbind:

zz1 <- "or,d,ddate,rdate,changes,class,price,fdate,company,number,minutes,added,source
VA1,VA2,2014-05-24,,0,0,2124,2014-05-22 15:50:16,,,,2014-05-22 12:20:03,ss
VA1,VA2,2014-05-26,,0,0,2124,2014-05-22 15:03:44,,,,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-05,,0,0,2124,2014-05-22 15:48:24,,,,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-09,,0,0,2124,2014-05-22 15:37:35,,,,2014-05-22 12:20:03,s2
VA1,VA2,2014-06-16,,0,0,2124,2014-05-22 14:17:33,,,,2014-05-22 12:20:03,ss"

zz2 <- "or,d,ddate,rdate,changes,class,price,fdate,company,number,minutes,added,source
VA3,VA4,2014-05-24 12:23:00,,0,0,2124,2014-05-22 15:50:16,,,,2014-05-22 12:20:03,ss
VA1,VA2,2014-05-26 14:00:01,,0,0,2124,2014-05-22 15:03:44,,,,2014-05-22 12:20:03,s1
VA5,VA6,2014-06-05 18:00:04,,0,0,2124,2014-05-22 15:48:24,,,,2014-05-22 12:20:03,s1
VA7,VA8,2014-06-09 18:00:07,,0,0,2124,2014-05-22 15:37:35,,,,2014-05-22 12:20:03,s2
VA9,VA0,2014-06-16 19:00:20,,0,0,2124,2014-05-22 14:17:33,,,,2014-05-22 12:20:03,ss"

columnClasses <- c("factor", "factor", "Date", "factor", "integer", "factor", "integer", "factor", "factor", "factor", "integer", "factor", "factor")
dt1 <- read.table(text=zz1, header = TRUE, sep = ",", comment.char = "", quote = "", na.strings = c(""), colClasses = columnClasses)

columnClasses <- c("factor", "factor", "POSIXct", "factor", "integer", "factor", "integer", "factor", "factor", "factor", "integer", "factor", "factor")
dt2 <- read.table(text=zz2, header = TRUE, sep = ",", comment.char = "", quote = "", na.strings = c(""), colClasses = columnClasses)

dt <- rbind(dt1, dt2)
class(dt$ddate) # [1] "Date"

dt <- rbind(dt2, dt1)
class(dt$ddate) # [1] "POSIXct" "POSIXt"

What should I do to always have POSIXct? Since I can not control the sequence when I get the data from CSV files like below:

tables <- lapply(files, readCSVFile)
dt <- rbindlist(tables, fill = TRUE)

回答1:


I think you could treat each file when you load with read.csv so that the ddate variable is converted to POSIXct. Then the merging can be better controlled. This can be accomplished by creating your own function to be used by lapply.

Example

ddate.convert = function(x){tmp <- readcsv(x); tmp$ddate <- as.POSIXct(tmp$ddate); tmp}
tables <- lapply(files, FUN=ddate.convert)
dt <- rbindlist(tables, fill = TRUE)


来源:https://stackoverflow.com/questions/29369336/how-to-use-rbind-to-merge-data-tables-with-posixct-and-date-column-classes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!