【发布时间】:2016-05-13 12:50:39
【问题描述】:
我正在尝试完成一个有差距的数据框。数据是按小时构建的,并且在几个小时之间会有一些跳跃。这是数据框的示例:
sms <- read.csv("hoursms2.csv", sep = ";", header = FALSE)
sms$date <- strptime(sms$date,"%d/%m/%Y %H:%M")
date count
2015-12-17 22:00:00 5
2015-12-18 09:00:00 7
2015-12-18 10:00:00 3
2015-12-18 12:00:00 6
我尝试创建另一个数据帧,该数据帧的范围从第一个数据帧的开始到结束,但包含所有时间并使用唯一标识符来跟踪它:
hh <- seq(min(sms$date), max(sms$date), by="hour")
hh <- as.data.frame(hh)
hh <- cbind(hh,seq(1:3292)) #length of the hh data frame
这给出了以下内容:
date id
2015-12-04 12:00:00 1
2015-12-04 13:00:00 2
2015-12-04 14:00:00 3
2015-12-04 15:00:00 4
2015-12-04 16:00:00 5
到目前为止,我已经尝试了在 StackOverflow 上找到的这三件事,here,但在这种情况下它们不起作用:
res <- merge(sms,hh,by = "date", all = TRUE)
res2 <- res[duplicated(res$date), ]
res3 <- res[!duplicated(res), ]
第一个命令 res 的作用是复制所有单元格,它不会按日期合并它,因此它给出以下内容:
2015-12-23 19:00:00 5
2015-12-23 19:00:00 NA
另一个搞砸了一切。我认为这与未正确关联但不确定的日期格式有关。请对如何按日期完成我的数据框有任何建议吗?
【问题讨论】:
-
其中一种方法是使用来自
dplyr包的left_join()。你做left_join(hh, sms),我认为这应该给你你想要的。 -
@Gopala 刚试了一下,出现以下错误: Joining by: "date" Error: cannot join on columns 'date' x 'date': Can't join on 'date' x 'date ' 因为不兼容的类型(POSIXct、POSIXt / POSIXlt、POSIXt)