通过引用和聚合进行赋值会在数据表R中创建重复项
我观察到R中data.table的一个奇怪行为,我想知道这是否是一个bug。以下是我使用的代码:通过引用和聚合进行赋值会在数据表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
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)]