通过引用和聚合进行赋值会在数据表R中创建重复项

通过引用和聚合进行赋值会在数据表R中创建重复项,r,data.table,aggregation,in-place,R,Data.table,Aggregation,In Place,我观察到R中data.table的一个奇怪行为,我想知道这是否是一个bug。以下是我使用的代码: num_req <- fread("number_requests.csv") num_req[, nrequests := sum(nrequests, na.rm=T), by = list(reqtype, server, timestamp)] 正如您所看到的,即使所有键都完全相同,我最终还是得到了一个重复的行 如果在我得到的输出上重新运行聚合 nrequests timest

我观察到R中data.table的一个奇怪行为,我想知道这是否是一个bug。以下是我使用的代码:

num_req <- fread("number_requests.csv")
num_req[, nrequests := sum(nrequests, na.rm=T), by = list(reqtype, server, timestamp)]
正如您所看到的,即使所有键都完全相同,我最终还是得到了一个重复的行

如果在我得到的输出上重新运行聚合

   nrequests timestamp    reqtype   server   
3:        44 1489276860   reqtype1  server1
4:        44 1489276860   reqtype1  server1
现在,如果我这样做了

tmp2 <- num_req[, list(nrequests = sum(nrequests, na.rm=T)), by = list(reqtype, server, timestamp)]

tmp2您有点误用了
:=
运算符,该运算符完全按照它应该执行的操作(通过引用添加/更新列)感谢您的快速回复文档。。。如果我理解正确,如果输出data.table小于输入data.table(因为group by),我不应该使用t
:=
操作符?
:=
通过覆盖
nrequests
和相应的组结果来更新
num_req
中的每一行。如果没有,将创建一个新对象,每组一行。比较
DT感谢您对我们和Docendo的帮助!
tmp2 <- num_req[, list(nrequests = sum(nrequests, na.rm=T)), by = list(reqtype, server, timestamp)]