2014-12-18 89 views
3

我有以下的列的數據:data.table外連接基於羣體中的R

CaseID, Time, Value.

的「時間」列的值不會在1.定期我嘗試添加缺少的除CaseID外的其餘列的時間值爲'NA'。

Case Value Time 
1 100 07:52:00 
1 110 07:53:00 
1 120 07:55:00 
2 10  08:35:00 
2 11  08:36:00 
2 12  08:38:00 

所需的輸出:

Case Value Time 
1 100 07:52:00 
1 110 07:53:00 
1 NA  07:54:00 
1 120 07:55:00 
2 10  08:35:00 
2 11  08:36:00 
2 NA  08:37:00 
2 12  08:38:00 

我試圖dt[CJ(unique(CaseID),seq(min(Time),max(Time),"min"))],但它提供了以下錯誤:

Error in vecseq(f__, len__, if (allow.cartesian || notjoin) NULL else as.integer(max(nrow(x), : 
    Join results in 9827315 rows; more than 9620640 = max(nrow(x),nrow(i)). Check for duplicate key values in i, each of which join to the same group in x over and over again. If that's ok, try including `j` and dropping `by` (by-without-by) so that j runs for each group to avoid the large allocation. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and datatable-help for advice. 

我不能夠使它work..any幫助將不勝感激。

+2

你想要的輸出是什麼? –

+0

@DavidArenburg我已經編輯了我想要的輸出和我得到的錯誤 – UoU

+0

的問題,你如何分配案例值? –

回答

3

這樣?

dt[,Time:=as.POSIXct(Time,format="%H:%M:%S")] 
result <- dt[,list(Time=seq(min(Time),max(Time),by="1 min")),by=Case] 
setkey(result,Case,Time) 
setkey(dt,Case,Time) 
result <- dt[result][,Time:=format(Time,"%H:%M:%S")] 
result 
# Case Value  Time 
# 1: 1 100 07:52:00 
# 2: 1 110 07:53:00 
# 3: 1 NA 07:54:00 
# 4: 1 120 07:55:00 
# 5: 2 10 08:35:00 
# 6: 2 11 08:36:00 
# 7: 2 NA 08:37:00 
# 8: 2 12 08:38:00 

另一種方式:

dt[, Time := as.POSIXct(Time, format = "%H:%M:%S")] 
setkey(dt, Time) 
dt[, .SD[J(seq(min(Time), max(Time), by='1 min'))], by=Case] 

我們組通過案例和對每個組使用.SD(因而對Time設定鍵)上Time加入。從這裏您可以使用format(),如上所示。

+0

這是給出了相同的錯誤,但現在對於單個組我猜。錯誤:將結果連接到1504行;超過1440 = max(nrow(x),nrow(i))。在i中檢查重複的鍵值,每個鍵值一次又一次地連接到x中的同一組。如果沒有問題,可以嘗試使用'j'和''by'(by-without-by),這樣j爲每個組運行以避免大的分配。如果您確定要繼續,請重新運行allow.cartesian = TRUE。否則,請在FAQ,Wiki,Stack Overflow和datatable-help中搜索此錯誤消息以獲取建議。 數據集的總大小爲1000100行 – UoU

+0

@UUU,您是否閱讀過說明如何修復它的錯誤消息?請查看[this](http://stackoverflow.com/a/23087759/559784)或[this](http://stackoverflow.com/q/25204859/559784)發佈其他解釋。 – Arun

+0

您是否檢查過特定案例是否有多個記錄具有相同的時間? – jlhoward