我可以在分组data.table时打印一些东西吗?

时间:2016-03-14 18:35:59

标签: r data.table grouping

我们说我有这个数据。表:

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')

谢谢

1 个答案:

答案 0 :(得分:6)

通常,您可以执行许多步骤,例如

DT[i, {
  step1
  step2
  return_value # preferably a list
}, by=g]

您也可以查看示例2.9 ["我可以跟踪j表达式在组中运行吗?"]和2.8 [" {{34}的范围规则是什么? {1}} {/ 3}}中的表达式?"]。

在OP的例子中,我通常会这样做:

j

打印

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 是一个data.table,即the data.table FAQ。如果您只需要打印结果而不是对象,则可以将最终out替换为out