我已經在數據表中缺失的行描述從time
,sid
和s.c
到count
功能:如何檢測並重新插入缺失的數據?
> dates.dt[1001:1011]
sid s.c count time
1: missing CLICK 104192 2013-05-25 10:00:00
2: missing SHARE 7694 2013-05-25 10:00:00
3: present CLICK 99573 2013-05-25 10:00:00
4: present SHARE 89302 2013-05-25 10:00:00
5: missing CLICK 28 2013-05-25 11:00:00
6: present CLICK 25 2013-05-25 11:00:00
7: present SHARE 15 2013-05-25 11:00:00
8: missing CLICK 104544 2013-05-25 12:00:00
9: missing SHARE 7253 2013-05-25 12:00:00
10: present CLICK 105891 2013-05-25 12:00:00
11: present SHARE 88709 2013-05-25 12:00:00
缺少行是(我期待有一個排的每個第一次的兩個值和第二列和每個時間片):
missing SHARE 0 2013-05-25 11:00:00
如何檢測和恢復這種缺失行?
我發現這個問題的方法是
library(data.table)
total <- dates.dt[, list(sum(count)) , keyby="time"]
setnames(total,"V1","total")
ts <- dates.dt[s.c=="SHARE" & sid=="missing", list(sum(count)) , keyby="time"]
cat("SHARE/missing:",nrow(ts),"rows\n")
stopifnot(identical(total$time,ts$time)) # --> ERROR!
total$shares.missing <- ts$V1
現在,我想我可以找到在哪裏ts$time
和total$time
不同,並插入一個0行有首位,但是這似乎是一個相當繁瑣 過程。
謝謝!
* 「失蹤行,顯然是」 * - 哈哈,笏?我認爲你需要詳細闡述一下你期望得到的不同類型的遺漏 – eddi
類似於''rbind'在cbind(expand.grid(unique(dt $ sid),unique(dt $ sc),unique(dt $ time)),0)'然後'setkey(dt,...)'把插入放在正確的位置。 – Frank
@Frank:感謝'expand.grid'!我如何才能找到哪些行存在於其返回值中,但在我的原始數據表中不存在? – sds