我似乎找不到任何关于.EACHIdata.table中到底做了什么的文档.我在文件中看到了对它的简短提及:

对已知组的子集进行聚合尤其有效

但在DT人的背景下,"群体"意味着什么?组是否由设置为DT的键确定?该组是否使用所有列作为键的每个不同行?我完全理解如何运行像DT[i,j,by=my_grouping_variable]这样的东西,但对.EACHI如何工作感到困惑.有人能解释一下吗?

推荐答案

我已将此添加到列表here中.希望我们能按计划交货.


原因很可能是by=.EACHI是最近的特性(自1.9.4以来),but what it does isn't.让我举个例子来解释.假设我们有两个数据.表XY:

X = data.table(x = c(1,1,1,2,2,5,6), y = 1:7, key = "x")
Y = data.table(x = c(2,6), z = letters[2:1], key = "x")

我们知道,我们可以通过做X[Y]件事来加入.这类似于subset操作,但使用data.tables(而不是整数/行名称或逻辑值).对于Y中的每一行,取Y的键列,它在X的键列(+Y中的列)中查找并返回相应的匹配行.

X[Y]
#    x y z
# 1: 2 4 b
# 2: 2 5 b
# 3: 6 7 a

现在让我们假设,对于Y的键列中的每一行(这里只有一个键列),我们希望得到X中的count个匹配项.在data.table < 1.9.4的版本中,我们可以通过简单地在j中指定.N来实现这一点,如下所示:

# < 1.9.4
X[Y, .N]
#    x N
# 1: 2 2
# 2: 6 1

implicitly所做的是,在j存在的情况下,对X的每个匹配结果(对应于Y中的行)判断j-expression.这被称为by-without-byimplicit-by,因为它好像有一个隐藏的.

问题是,它将始终执行by次操作.所以,如果我们想知道一个连接后的行数,那么我们必须做:X[Y][ .N](或者在本例中是nrow(X[Y])).也就是说,如果我们不想要by-without-by,就不能在同一个调用中使用j表达式.因此,当我们使用例如X[Y, list(z)]时,它使用by-without-by判断list(z),因此稍微慢一些.

此外,data.table名用户要求将其设置为explicit,更多内容请参见thisthis.

因此增加了by=.EACHI个.现在,当我们这样做:

X[Y, .N]
# [1] 3

它做了它应该做的(避免混淆).它返回联接产生的行数.

X[Y, .N, by=.EACHI]

对匹配的行Y中对应的行Y的值进行计算.使用which=TRUE更容易看到这一点.

X[.(2), which=TRUE] # [1] 4 5
X[.(6), which=TRUE] # [1] 7

如果我们每人跑.N,那么我们应该得到2,1.

X[Y, .N, by=.EACHI]
#    x N
# 1: 2 2
# 2: 6 1

所以我们现在有了这两种功能.希望这有帮助.

R相关问答推荐

使用case_when和Mutate搜索多个列以寻找条件

根据shiny 应用程序中的数字输入更改图标 colored颜色

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

R Lubridate:舍入/快照日期时间到一天中最近的任意时间?

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

selectInput不返回ALL,并将因子转换为shiny 的数字

在不安装软件包的情况下测试更新

将向量组合到一个数据集中,并相应地命名行

在for循环中转换rabrame

使用geom_segment()对y轴排序

R根据条件进行累积更改

计算时间段的ECDF(R)

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

`夹心::vcovCL`不等于`AER::tobit`标准错误

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

在R中,如何将误差条放置在堆叠的每个条上?

如何对r中包含特定(未知)文本的行求和?

Geom_arcbar()中出错:找不到函数";geom_arcbar";

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

禁用时,SelecizeInput将变得不透明