【问题标题】:How to benefit from `.BY` in data.table?如何从 data.table 中的 .BY 中受益?
【发布时间】:2014-03-19 15:51:45
【问题描述】:

这是.BY手册中的解释

.BY 是一个列表,其中包含 by 中每个项目的长度为 1 的向量。当事先不知道by 时,这可能很有用。 by 变量也可以通过名称直接提供给j;例如,如果 j 是绘图命令,则可用于图形标题,或者根据组变量的值使用 if() 进行分支。

它说“例如,如果j 是一个绘图命令,则对图形标题很有用,或者根据组变量的值使用if() 进行分支。”

但是,我仍然不确定何时使用。如何从这个.BY 中受益?

你能举一个例子吗?非常感谢!

【问题讨论】:

标签: r data.table


【解决方案1】:

这是一个简单的例子。我们使用.BY 变量来显示绘图属于哪个组。请注意,您也可以不使用.BY,将其替换为gear[1],这将是等效的。

library(data.table)
mtcars_dt = data.table(mtcars)
mtcars_dt[,
  plot(wt, mpg, main = paste('Gears: ', .BY)),
  gear
]

【讨论】:

  • 请注意,gear 在该设置中的长度已经为 1,因此您不需要 gear[1],只需 gear 即可
  • 你是对的。我认为gear 将在子集数据框中,但显然不是。
  • 将其保留为向量是低效的,因为它是相同的值,R 将根据需要回收标量
  • @Ramnath,你能举一个关于branch with if() depending on the value of a group variable.的例子吗?非常感谢!
  • 关于eddi's comment,另见data.table FAQ在每个组内,为什么组变量长度为1? "[...] x 是分组变量和(从 v1.6.1 开始)长度为 1(如果在 j 中检查或使用)。它为了效率和方便。"
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2010-09-12
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多