我有一个data.table,它列出了用户ID,周数,用户执行操作的事实(Processed,0或1)和我用来计算我有多少值的列,名为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
答案 0 :(得分: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"))