对于R data.table,如何使用uniqueN()在多个列中统计唯一/不同的值?

对于R data.table,如何使用uniqueN()在多个列中统计唯一/不同的值?,r,dataframe,data.table,unique,R,Dataframe,Data.table,Unique,假设我们有以下Rdata.table(虽然dataframe原则上也可以): 对于此任务,order\u no的值是不相关的——我想计算name和overlimit的唯一行数: name overlimit distinct_groups Amy TRUE 2 Amy FALSE 1 Jack TRUE 4 Jack FALSE 0 Dave TRUE 1 Dave FALSE 1

假设我们有以下R
data.table
(虽然
dataframe
原则上也可以):

对于此任务,
order\u no
的值是不相关的——我想计算
name
overlimit
的唯一行数:

name    overlimit  distinct_groups
Amy     TRUE       2
Amy     FALSE      1
Jack    TRUE       4
Jack    FALSE      0
Dave    TRUE       1
Dave    FALSE      1
...

是否只是在
by
参数中包含更多列

如果请求将“overlimit”中的相邻元素作为一个单独的组,那么我们可以使用
rleid
创建组

dt[, .(overlimit = overlimit[1], distinct_group = uniqueN(order_no)),
     .(name, grp = rleid(overlimit))][, grp := NULL][]

如果它是一个简单的分组,并且只需要组合

dt[, .(distinct_group = .N), by = .(name, overlimit)
  ][CJ(name = dt$name, overlimit = dt$overlimit, unique = TRUE), 
      on = .(name, overlimit)][is.na(distinct_group), distinct_group := 0][]

要回答您的问题,是的,您可以通过参数将两列添加到

dt[, .(distinct_groups = uniqueN(order_no)), by = c("Name", "Overlimit")]

OP的所需输出在distinct_groups列中为零;你的呢?@Frank我想他的输入和输出都不正确correct@Frank根据输入示例,
jacktrue
count仅为3是的,OP还以一个不可复制、不完整且措辞有些拙劣的示例fwiw赢得了我的否决票。但我也会对这两个答案投反对票,因为你们在发帖之前都懒得澄清OP想要什么。在我看来,他们很可能是在重复目标中寻找答案。@ShanZhengYang请继续,用一个可复制的示例和匹配的预期输出编辑您的帖子。如果您想编辑以改进它,我会说:通过复制粘贴来输入,这样其他人就可以在新打开的R控制台中运行它;并确保显示的所需输出完整且与输入相对应。不管怎样,链接的问题不包括它吗?@Frank是的,我正试图删除这个问题。谢谢你,我想你现在应该可以删除它了(使用底部的链接)。“如果你认为这会有帮助的话,我可以解开它。”弗兰克,不过有点不同。使用URL上提供的解决方案,
setkey(dt,sex,fruit)[CJ(unique(sex),unique(fruit)),.N,by=.EACHI]
,这将删除
dt
中的任何其他列。有没有办法保存所有的列?当然,您可以使用此输出并与原始data.table合并,但可能有更好的方法。我明白了吗?不,我不明白。我认为您的数据可能格式不正确(看到这样重复的值)。您可能想看看hadley整洁的数据文件,看看如何将其拆分为几个表
dt[, .(distinct_groups = uniqueN(order_no)), by = c("Name", "Overlimit")]