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

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

谢谢

最佳答案

一般来说,你可以做很多步骤,比如

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/

相关文章:

r - 在 R 中使用 rgl 绘制半透明球体

r - 如何向量化模数?

r - 删除 R data.table 的行

java - 在 Java 中按字段名分组

python - 如何从匹配的表达式中找到特定的单词?

r - 选择仅包含数值 >= 0 的列

r - Rplot_ly堆叠条形图只能显示不同颜色的多个值

r - 查找列的相关性

r - 在多个条件下的R data.table子集。

sql - 将总计行添加到 SQL 查询的底部