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

如何按ID分组统计R data.table多列中的唯一值?

解决方案

要实现按ID分组统计colA和colB两列的唯一值总数,你可以用以下两种简洁的data.table写法:

方法一:直接合并列元素

have[, .(UnN = uniqueN(c(colA, colB))), by = ID]

方法二:使用.SDcols指定目标列(适合多列场景)

如果后续需要统计更多列,用.SDcols会更灵活,不用逐个列名写:

have[, .(UnN = uniqueN(unlist(.SD))), by = ID, .SDcols = c("colA", "colB")]

两种方法运行后都会得到你想要的want结果:

ID UnN
1:  1   3
2:  2   3

你的代码无法运行的原因

我们来拆解你代码里的几个关键问题:

  1. 列引用错误:你写的c("colA","colB")是创建了一个包含两个字符串的向量,而不是提取这两列的实际数据。在data.table中,直接写列名(不加引号)才能引用列的内容。
  2. by参数语法错误:C("ID")是错误的写法——C()是R中用于创建复数的函数,这里应该用by = ID(直接引用列名)或者by = "ID"(字符串形式指定分组列)。
  3. j部分的语法不规范:虽然新版data.table支持直接写UnN = ...,但更稳妥且符合规范的写法是用.()或list()包裹j部分的计算结果,比如.("UnN" = ...)。

修正后的代码(结合正确语法)就是上面给出的方法一啦。

内容的提问来源于stack exchange,提问作者LeGeniusII

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:22