2016-05-13 77 views
0

我想完成一个有差距的数据框。数据是按小时结构化的,并且在几个小时之间有一些跳跃。这是数据帧的样本:通过合并完成的数据框填补空白?

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 

到目前为止,我已经试过这三样东西我在计算器上,here发现,但他们做的在这种情况下无法正常工作:

res <- merge(sms,hh,by = "date", all = TRUE) 
res2 <- res[duplicated(res$date), ] 
res3 <- res[!duplicated(res), ] 

的第一条命令,资源,什么是是复制的所有单元格,它不会按日期进行合并,所以它提供了以下:

2015-12-23 19:00:00  5 
2015-12-23 19:00:00  NA 

另一个搞砸了一切。我认为这与日期格式不正确相关,但不确定。任何关于如何填写我的数据框的建议?

+0

其中一种方法是使用'dplyr'包中的'left_join()'。你做'left_join(hh,短信)',这应该会给你你想要的,我想。 – Gopala

+0

@Gopala刚刚尝试过它,并给出了以下错误:加入:“日期” 错误:无法加入列'日期'x'日期':无法加入'日期'x'日期',因为不兼容的类型POSIXct,POSIXt/POSIXlt,POSIXt) – adrian1121

回答

1

使用库dplyr,请执行以下操作,确保您在两个数据框中都有适当的类型。

这里是我设置了两个数据帧的方式:

str(sms) 
'data.frame': 4 obs. of 2 variables: 
$ date : POSIXct, format: "2015-12-17 22:00:00" "2015-12-18 09:00:00" "2015-12-18 10:00:00" ... 
$ count: int 5 7 3 6 
str(hh) 
'data.frame': 15 obs. of 2 variables: 
$ date: POSIXct, format: "2015-12-17 22:00:00" "2015-12-17 23:00:00" "2015-12-18 00:00:00" ... 
$ id : int 1 2 3 4 5 6 7 8 9 10 ... 

这里是左连接代码:

library(dplyr) 
left_join(hh, sms) 
Joining by: "date" 
        date id count 
1 2015-12-17 22:00:00 1  5 
2 2015-12-17 23:00:00 2 NA 
3 2015-12-18 00:00:00 3 NA 
4 2015-12-18 01:00:00 4 NA 
5 2015-12-18 02:00:00 5 NA 
6 2015-12-18 03:00:00 6 NA 
7 2015-12-18 04:00:00 7 NA 
8 2015-12-18 05:00:00 8 NA 
9 2015-12-18 06:00:00 9 NA 
10 2015-12-18 07:00:00 10 NA 
11 2015-12-18 08:00:00 11 NA 
12 2015-12-18 09:00:00 12  7 
13 2015-12-18 10:00:00 13  3 
14 2015-12-18 11:00:00 14 NA 
15 2015-12-18 12:00:00 15  6 

注:我不得不列名hh转换为date为所提供的代码不会这样做。或者,您可以在left_join调用中指定by参数。

+0

非常感谢!问题确实是日期格式! – adrian1121