Ald*_*eja 2 grouping r data.table
假设我有这个数据.表:
dt=data.table(ID=letters[seq(3,8)],category=rep(c('a','b'),each=3),value=seq(1,6))
Run Code Online (Sandbox Code Playgroud)
我想得到每个寄存器的相对百分比相对于一个类别中所有值的总和.除此之外,我想出于调试原因打印该类别.它会是这样的:
dt[,print(.BY[["category"]]),
list(relative=value/sum(dt[category==.BY[["category"]],value],
by='ID')
Run Code Online (Sandbox Code Playgroud)
谢谢
一般来说,你可以做很多步骤
DT[i, {
step1
step2
return_value # preferably a list
}, by=g]
Run Code Online (Sandbox Code Playgroud)
您还可以检查实例2.9 ["我可以跟踪j表达,因为它贯穿组呢?"]和2.8"有哪些范围规则j表达式?"]中的data.table常见问题.
在像OP这样的例子中,我通常会这样做:
r = dt[, {
cat("\ncategory ==",.BY[[1]],"\n\n")
out = list(ID = ID, relative = value/sum(value))
print(setDT(out), row.names=FALSE)
cat("\n")
out
}, by = 'category']
Run Code Online (Sandbox Code Playgroud)
打印
category == a
ID relative
c 0.1666667
d 0.3333333
e 0.5000000
category == b
ID relative
f 0.2666667
g 0.3333333
h 0.4000000
Run Code Online (Sandbox Code Playgroud)
如果性能是一个问题,你可能想稍微调整一下,因为它out是一个data.table,这是一个糟糕的返回值j.如果您只需要打印结果而不是对象,则可以替换最终out结果NULL.