Pav*_*ive 0 aggregate r data.table
我有一个数据表可以减少到这个:
set.seed(1);
dt<-data.table(form=c(1,1,1,2,3,3,3,4,4,5),
mx=c("a","b","c","d","e","f","g","e","g","b"),
vr=runif(10,100,200),
usr=c("l","l","l","m","o","o","o","l","l","m"),
type=c("A","A","A","C","C","C","C","C","C","A"))
Run Code Online (Sandbox Code Playgroud)
我可以生成一个表格:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr)),
by=usr]
Run Code Online (Sandbox Code Playgroud)
我无法计算的是A类公式的数量(每行是观察值,form是公式数).我试过了:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=sum(type=="A"),
by=usr]
Run Code Online (Sandbox Code Playgroud)
并且:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=length(unique(type=="A"))),
by=usr]
Run Code Online (Sandbox Code Playgroud)
但是没有一个考虑到发现的"A"数量需要与唯一的公式(form)数量相关的事实.
我想要的结果是:
usr n.form n.mx tot.vr n.A
1: l 2 5 750.0398 1
2: m 2 2 296.9994 1
3: o 1 3 504.4747 0
Run Code Online (Sandbox Code Playgroud)
但我找不到实现它的方法.任何光棚都非常受欢迎.谢谢,
======= 编辑添加 ========
我想知道有多少公式(唯一数字dt$form)是"A"类型(因此我可以计算总公式中的一部分).直接数(sum)是类型A 的观察总数,而存在(any)给出了我是否至少有一个类型为"A" 的公式,而不是该类型的公式数(这是我想要的) ).请注意,任何给定的公式将始终为"A"或"C"类型(在一个公式中不是混合类型)
在devel版本中data.table,您可以使用uniqueN而不是length(unique(..,
library(data.table)#v1.9.5+
dt[,list(n.form=uniqueN(form), n.mx=uniqueN(mx),tot.vr=sum(vr),
n.A=uniqueN(form[type=='A'])) , by = usr]
# usr n.form n.mx tot.vr n.A
#1: l 2 5 750.0398 1
#2: m 2 2 296.9994 1
#3: o 1 3 504.4747 0
Run Code Online (Sandbox Code Playgroud)