1

timesid、および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

欠落している行は次のとおりです (1 番目と 2 番目の列の 2 つの値と各タイム スライスのそれぞれに行が必要です):

    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これで、 andが異なる最初の場所を見つけて、そこに 0 行を挿入できると思いますtotal$time が、これはかなり面倒なプロセスのようです。

ありがとう!

4

1 に答える 1

2

@Frankの提案に従って、次のことができます。

setkey(dt, time, sid, s.c)
dt[J(expand.grid(unique(time),unique(sid),unique(s.c)))][order(time, sid, s.c)]
#                   time     sid   s.c  count
# 1: 2013-05-25 10:00:00 missing CLICK 104192
# 2: 2013-05-25 10:00:00 missing SHARE   7694
# 3: 2013-05-25 10:00:00 present CLICK  99573
# 4: 2013-05-25 10:00:00 present SHARE  89302
# 5: 2013-05-25 11:00:00 missing CLICK     28
# 6: 2013-05-25 11:00:00 missing SHARE     NA
# 7: 2013-05-25 11:00:00 present CLICK     25
# 8: 2013-05-25 11:00:00 present SHARE     15
# 9: 2013-05-25 12:00:00 missing CLICK 104544
#10: 2013-05-25 12:00:00 missing SHARE   7253
#11: 2013-05-25 12:00:00 present CLICK 105891
#12: 2013-05-25 12:00:00 present SHARE  88709
于 2013-05-31T18:56:27.877 に答える