我在理解传递的引用属性方面遇到了一些麻烦data.table.有些操作似乎"打破"了参考,我想准确理解发生了什么.
在data.table从另一个创建a 时data.table(通过<-,然后更新新表:=,原始表也会被更改.这是预期的,按照:
?data.table::copy
和stackoverflow:传递引用操作在数据表包中
这是一个例子:
library(data.table)
DT <- data.table(a=c(1,2), b=c(11,12))
print(DT)
# a b
# [1,] 1 11
# [2,] 2 12
newDT <- DT # reference, not copy
newDT[1, a := 100] # modify new DT
print(DT) # DT is modified too.
# a b
# [1,] 100 11
# [2,] 2 12
Run Code Online (Sandbox Code Playgroud)
但是,如果我:=在<-赋值和:=上面的行之间插入非基础修改,DT现在不再修改:
DT = data.table(a=c(1,2), b=c(11,12))
newDT …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame,我需要计算每组的平均值(即每个Month,下面).
Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32
Run Code Online (Sandbox Code Playgroud)
我的期望的输出是像下面,其中对于所述的值Rate1和Rate2是组装置.请忽略这个值,我已经为这个例子做了补充.
Name Rate1 Rate2
Aira 23.21 12.2
Ben 45.23 43.9
Cat 33.22 32.2
Run Code Online (Sandbox Code Playgroud) data.table对象现在有一个:=运算符.是什么让这个运算符与所有其他赋值运算符不同?此外,它的用途是什么,它的速度有多快,什么时候应该避免?
我似乎无法找到关于究竟.EACHI做什么的任何文档data.table.我在文档中看到它的简要提及:
在i和设置中传递这些组时,已知组子集的聚合特别有效
by=.EACHI.何时i是data.table,DT[i,j,by=.EACHI]评估连接中每一行j的组.我们称之为每个i的分组.DTi
但是,"群体"在上下文中DT是什么意思?是否由设置的密钥确定的组DT?该组是否每个使用所有列作为键的不同行?我完全理解如何运行类似DT[i,j,by=my_grouping_variable]但是如何.EACHI工作的困惑.有人可以解释一下吗?
data.table引入了:=运算符.为什么不超载< - ?
r ×5
data.table ×4
colon-equals ×2
aggregate ×1
copy ×1
group-by ×1
performance ×1
reference ×1