- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 R 2.15.0
和 data.table 1.8.9
:
d = data.table(a = 1:5, value = 2:6, key = "a")
d[J(3), value]
# a value
# 3 4
d[J(3)][, value]
# 4
J
语法问题,同样的期望适用于以下(与上述相同)表达式:
t = data.table(a = 3, key = "a")
d[t, value]
d[t][, value]
data.table
被设计成这样)关键列会在
d[t, value]
中自动打印出来?
data.table
时都会有一个hidden by present通过
X[Y]
合并语法,以及
by
是关键。它以这种方式设计的原因似乎如下 - 因为
by
合并时必须执行操作,最好利用这一点,而不是做另一个
by
如果你打算通过合并的关键来做到这一点。
data.table
语法
d[i, j, by = b]
是
take
d
, apply thei
operation (be that subsetting or merging or whatnot), and then do thej
expression "by" b
i
上合并,是
by
只是合并的关键,等等)。我相信这应该是
data.table
的工作- 值得称道的努力
data.table
在合并的一种特殊情况下更快,当
by
等于键,应该以另一种方式完成(例如,通过内部检查
by
表达式是否实际上是合并的键)。
最佳答案
编辑号无限:常见问题解答 1.12 完全回答了您的问题:(同样有用/相关的是 FAQ 1.13 ,此处未粘贴)。
1.12 What is the difference between X[Y] and merge(X,Y)?
X[Y] is a join, looking up X's rows using Y (or Y's key if it has one) as an index. Y[X] is a join, looking up Y's rows using X (or X's key if it has one) as an index. merge(X,Y)1 does both ways at the same time. The number of rows of X[Y] and Y[X] usually dier; whereas the number of rows returned by merge(X,Y) and merge(Y,X) is the same. BUT that misses the main point. Most tasks require something to be done on the data after a join or merge. Why merge all the columns of data, only to use a small subset of them afterwards?
You may suggestmerge(X[,ColsNeeded1],Y[,ColsNeeded2])
, but that takes copies of the subsets of data, and it requires the programmer to work out which columns are needed. X[Y,j] in data.table does all that in one step for you. When you writeX[Y,sum(foo*bar)]
, data.table automatically inspects the j expression to see which columns it uses. It will only subset those columns only; the others are ignored. Memory is only created for the columns the j uses, and Y columns enjoy standard R recycling rules within the context of each group. Let's say foo is in X, and bar is in Y (along with 20 other columns in Y). Isn'tX[Y,sum(foo*bar)]
quicker to program and quicker to run than a merge followed by a subset?
j
赋值时喜欢
d[, 4]
或
d[, value]
在
data.table
,
j
被评估为
expression
.来自 data.table FAQ 1.1 关于访问
DT[, 5]
(第一个常见问题解答):
Because, by default, unlike a data.frame, the 2nd argument is an expression which is evaluated within the scope of DT. 5 evaluates to 5.
d[, value] # produces a "vector"
# [1] 2 3 4 5 6
i
时没有什么不同。是一个基本的索引,如:
d[3, value] # produces a vector of length 1
# [1] 4
i
时,情况就不同了。本身就是一个
data.table
.来自
data.table
介绍(第 6 页):
d[J(3)] # is equivalent to d[data.table(a = 3)]
join
.如果你只是做
d[J(3)]
然后您将获得与该连接相对应的所有列。如果你这样做,
d[J(3), value] # which is equivalent to d[J(3), list(value)]
join-based-subset
和一个
index-based-subset
廷操作。
d[J(3)][, value] # is equivalent to:
dd <- d[J(3)]
dd[, value]
dd[, value]
,
j
被评估为一个表达式,因此你得到一个向量。
data.table
s,我期待一个
data.table
data.table
再次介绍:
Passing a data.table into a data.table subset is analogous to A[B] syntax in base R where A is a matrix and B is a 2-column matrix. In fact, the A[B] syntax in base R inspired the data.table package.
关于r - data.table join 和 j-expression 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093289/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
当我尝试在 db2 中创建表时,它抛出以下错误 $ db2 CREATE TABLE employee(emp_id INT NOT NULL, emp_name VARCHAR(100)) sh:
我有: while (i < l) { if (one === two) { continue; } i++; } 但是 JSLint 说: Problem at line 1 chara
所以我有这个代码: char inputs[10] = ""; int numInputs = 0; while (numInputs < 10){ char c; printf("E
var ninja = { name: 'Ninja', say: function () { return 'I am a ' + this.name; }
我收到一个我不明白的错误,请注意,我是编码新手,所以这可能是一个简单的错误。 #include using namespace std; int main() { //Initialise Fahr
我正在使用 javascript 和 react,由于某种原因,我收到了一个奇怪的 token 错误。 这是发生错误的代码: renderNavBar() { if (!this.us
Closed. This question is off-topic。它当前不接受答案。
由于某种我无法解释的原因,编译器正在输出一个错误,指出它发现了一个意外的#else 标记。 这发生在文件的开头: #if defined( _USING_MFC ) #include "stda
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题在这里已经有了答案: Difference between sh and Bash (11 个答案) 关闭 2 年前。 我正在编写一个简单的 bash 脚本,我在 XX `(' unexpe
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic
我在 Windows 7 上编写了一个脚本,它不断给我一个错误“(此时出乎意料。”对于以下代码 if %vardns%=="NODNS" ( netsh interface ipv4 set ad
我正在尝试使用xmlstarlet(使用xpath)解析XML文件,但是出现语法错误,并且我不知道如何更正我的代码。 这是我的脚本: #!/bin/bash if [ $1=="author" ];
以下脚本旨在在目录中的所有文件上运行程序“senna”,并将每个文件的输出(保留输入文件名)写入另一个目录 for file in ./Data/in/*; do ./senna -iobta
我从 challengers.coffee 运行此代码,并收到错误 ActionView::Template::Error (SyntaxError: [stdin]:3:31:unexpected
我在 config.db.database; 行中有语法错误(意外的标记“.”)。这是我在文件中的代码 const config = require('../config/config') const
这一定很明显,但是我无法使它正常工作。我正在尝试传输应该用于构建$ classKey的对象,这反过来又导致删除所需的软件(amd64或i386)。好吧,这里的代码: $name = @("softwa
我正在使用 1.3.7 版学习 Grails,但我一直无缘无故地遇到以下语法错误: unexpected token: mapping @ line x, column y. 有一次,我通过运行“gr
我正在尝试找出这段Pascal代码的问题 function Factorial(n: integer): integer; begin if n = 0 then Result := 1
我是一名优秀的程序员,十分优秀!