2016-05-13 78 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