RStudio中.tbl_df出现unused arguments错误,data.table聚合失败求助
解决data.table聚合代码报错的问题
嘿,我一眼就看出问题啦——你的mydata现在是tibble(tbl_df)类型,不再是data.table对象了!之前能跑成功是因为当时它是data.table格式,但现在大概率是你用了dplyr这类工具处理过数据,把它转成tibble了,而tibble根本不支持data.table那种在[里写by和j的语法,所以才会报“unused argument (by = ...)”的错。
给你两个靠谱的解决方案:
方案一:转回data.table格式(推荐,符合你原来的代码习惯)
先把tibble转回data.table,用setDT()可以原地转换,不会额外占用内存,非常高效:
# 先转换为data.table对象(原地修改,无需赋值) setDT(mydata) # 再运行你原来的聚合代码,就能正常工作了 AggByInvNo <- mydata[, j = list(num_of_Product = length(Description), num_of_Quantity = sum(Quantity), totalPrice = sum(TotalPrice)), by = list(InvoiceNo, Country)]
如果你不想原地修改数据,也可以用as.data.table(mydata)生成一个副本,但大数据集下更推荐setDT()。
方案二:改用dplyr语法(适合继续用tibble的场景)
如果你想继续用tibble,可以用dplyr的分组聚合语法,逻辑和你原来的代码完全一致:
library(dplyr) AggByInvNo <- mydata %>% group_by(InvoiceNo, Country) %>% summarise( num_of_Product = n(), # 对应length(Description),统计行数就是产品数量 num_of_Quantity = sum(Quantity), totalPrice = sum(TotalPrice), .groups = "drop" # 取消分组,返回普通tibble ) %>% as.data.frame() # 转成data.frame,和你原来的输出格式一致
你可以先跑class(mydata)确认下当前的数据类型,就能验证我刚才说的原因啦!
内容的提问来源于stack exchange,提问作者M. Bander
相关产品推荐
相关产品推荐

