You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:36