-1

ユーザー ID、週番号、ユーザーが何かを行ったという事実 (処理済み、0 または 1) をリストする data.table と、HowMany と呼ばれる値の数をカウントするために使用する列があります。

 data <- data.table(WeekNumber=c(33,33,33,34,34,33,33,34,34), 
         User=c(1,1,1,1,1,2,2,2,2), 
         Processed=c(1,1,0,0,1,0,1,0,1),
         HowMany=c(1,1,1,1,1,1,1,1,1))

週ごとに、完了したことと完了していないことの合計を見つけたいので、次のようにします。

> dcast(setDT(data), WeekNumber~Processed, value.var="HowMany", sum) 
   WeekNumber 0 1
1:         33 2 3
2:         34 2 2

ここで、週ごとに行われたことと行われなかったものの平均数を見つけたいので、この場合、以前にユーザーごとにもある程度集計する必要がありますが、このステップで失敗します:

> dcast(setDT(data), WeekNumber~Processed+User, value.var="HowMany", mean) 
  WeekNumber 0_1 0_2 1_1 1_2
1:        33   1   1   1   1
2:        34   1   1   1   1

私の最適な結果は次のようになります。

WeekNumber 0   1
        33 1 1.5
        34 1   1
4

1 に答える 1

2

このようなものはどうですか:

dat[, user_processed := paste(User, Processed, sep="_")]
dcast(dat, WeekNumber~user_processed, value.var="Processed", length) 

これにより、次のことが得られます。

   WeekNumber 10001041_1 10001042_0 10001042_1
1:         33          0          3          2
2:         43          5          0          0

使用したサンプルデータ:

dat <- fread("User Processed WeekNumber
  1: 10001042         0         33
      2: 10001042         0         33
      3: 10001042         1         33
      4: 10001042         0         33
      5: 10001042         1         33
      870: 10001041         1         43
      871: 10001041         1         43
      872: 10001041         1         43
      873: 10001041         1         43
      874: 10001041         1         43")

dat <- dat[, V1 := NULL]
setnames(dat, c("User", "Processed", "WeekNumber"))
于 2016-11-10T17:07:18.527 に答える