假设我有这个数据表:
dt=data.table(ID=letters[seq(3,8)],category=rep(c('a','b'),each=3),value=seq(1,6))
我想得到每个寄存器的值相对于一个类别中所有值的总和的相对百分比。除此之外,出于调试原因,我想打印类别。它会是这样的:
dt[,print(.BY[["category"]]),
list(relative=value/sum(dt[category==.BY[["category"]],value],
by='ID')
谢谢
最佳答案
一般来说,你可以做很多步骤,比如
DT[i, {
step1
step2
return_value # preferably a list
}, by=g]
您还可以检查示例 2.9 [“我可以跟踪 j
表达式在组中的运行吗?”] 和 2.8 [“j
的作用域规则是什么> 表达式?”] 在 the data.table
FAQ .
在像 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']
打印
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
如果性能是个问题,您可能需要稍微调整一下,因为 out
是一个数据表,即 a bad return value for j
.如果只需要打印结果而不需要对象,可以将最后的out
替换为NULL
。
关于r - 我可以在分组 data.table 时打印一些东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995399/