- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎找不到任何关于 .EACHI
在 data.table
中具体执行什么操作的文档。我在文档中看到了它的简短提及:
Aggregation for a subset of known groups is particularly efficient when passing those groups in i and setting
by=.EACHI
. Wheni
is a data.table,DT[i,j,by=.EACHI]
evaluatesj
for the groups ofDT
that each row ini
joins to. We call this grouping by each i.
但是 DT
上下文中的“组”是什么意思?组是由 DT
上设置的键确定的吗?该组是否是使用所有列作为键的每个不同行?我完全理解如何运行 DT[i,j,by=my_grouping_variable]
之类的东西,但对 .EACHI
如何工作感到困惑。有人可以解释一下吗?
最佳答案
我已将此添加到列表 here 。希望我们能够按计划交付。
<小时/>原因很可能是 by=.EACHI
是一项最新功能(自 1.9.4 起),但它的作用却不是。让我用一个例子来解释一下。假设我们有两个 data.table X
和 Y
:
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]
来加入。这类似于子集操作,但使用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
中的匹配项。在 data.table
< 1.9.4 版本中,我们只需在 j
中指定 .N
即可实现此目的如下:
# < 1.9.4
X[Y, .N]
# x N
# 1: 2 2
# 2: 6 1
这隐式的作用是,在存在j
的情况下,在X的每个匹配结果上计算
(对应于j表达式
Y
中的行)。这被称为by-without-by或隐式by,因为就好像有一个隐藏的by。
问题是这将始终执行 by
操作。因此,如果我们想知道连接后的行数,那么我们必须这样做:X[Y][ .N]
(或简单地nrow(X[Y] )
在这种情况下)。也就是说,如果我们不需要 by-without-by
,就不能在同一调用中使用 j
表达式。因此,当我们执行 X[Y, list(z)]
时,它会使用 by-without-by
计算 list(z)
code> 因此速度稍慢。
此外,data.table
用户要求这是显式的 - 请参阅 this和 this了解更多背景信息。
因此添加了by=.EACHI
。现在,当我们这样做时:
X[Y, .N]
# [1] 3
它做了它应该做的事情(避免混淆)。它返回连接产生的行数。
并且,
X[Y, .N, by=.EACHI]
评估 Y
中每行的匹配行上的 j
表达式(对应于此处 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 - 数据表中的.EACHI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27004002/
我似乎找不到任何关于 .EACHI 在 data.table 中具体执行什么操作的文档。我在文档中看到了它的简短提及: Aggregation for a subset of known groups
我试图更好地了解 data.table 中的一些特殊变量是如何产生的。打包工作。其中之一是 .BY陈述。我还没有看到很多人使用它的例子,但文档暗示这在绘图中很有用。 例如,以下代码在 data.tab
我一直在玩新的 data.table条件合并功能,非常酷。我有两个表的情况,dtBig和 dtSmall ,并且当发生这种条件合并时,两个数据集中都有多个行匹配。有没有办法使用像 max 这样的函数来
根据 ?data.table 当使用 x[i,j] 时 i 是一个 data.table,i的列可以用j中的i.column访问。我的问题是如何一次访问所有列? 例子: library(data.ta
我再次努力理解 mult参数在执行更新加入时有效。 我想要做的是实现 lj 中定义的左连接. 出于性能原因,我想更新左表 “不平凡”的部分是,当左表和右表有一个共同的列时,(不考虑连接列),我想使用右
我是一名优秀的程序员,十分优秀!