R 计算 data.table 中的一个字段
R counting a field in data.table
我有一个数据 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"))
我可以用以下方法生成 table:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr)),
by=usr]
我没能做到的是统计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]
还有:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=length(unique(type=="A"))),
by=usr]
但其中 none 考虑到发现的 "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
但我找不到实现它的方法。非常感谢任何灯棚。
谢谢,
======= 编辑添加 ========
我想知道有多少公式(dt$form
中的唯一数字)属于"A"类型(这样我就可以计算出总公式的比例)。直接数 (sum
) 是 observations 类型 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
我有一个数据 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"))
我可以用以下方法生成 table:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr)),
by=usr]
我没能做到的是统计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]
还有:
dt[,
list(n.form=length(unique(form)),n.mx=length(unique(mx)),tot.vr=sum(vr),n.A=length(unique(type=="A"))),
by=usr]
但其中 none 考虑到发现的 "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
但我找不到实现它的方法。非常感谢任何灯棚。 谢谢,
======= 编辑添加 ========
我想知道有多少公式(dt$form
中的唯一数字)属于"A"类型(这样我就可以计算出总公式的比例)。直接数 (sum
) 是 observations 类型 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