对于 R data.table,如何使用 uniqueN() 对多列中的 unique/distinct 值进行排序?

For R data.table, how to use uniqueN() in order count unique/distinct values in multiple columns?

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

library(data.table)
new_dt = as.data.table(readcsv(...))
head(new_dt)
    name order_no  overlimit
1    Amy       32  TRUE
2   Jack       14  TRUE
3   Jack       16  TRUE
4   Dave       11  FALSE
5    Amy       22  TRUE
6   Jack       16  TRUE
7    Tom       19  FALSE
8  Larry       22  FALSE
9    Tom       89  FALSE
10  Dave       81  TRUE
11  Jack       67  TRUE
12   Tom       60  TRUE
13   Amy       23  FALSE
14  Jack       16  TRUE

对于此任务,order_no 的值无关紧要---我想计算 nameoverlimit 的唯一行数:

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][]

要回答您的问题,是的,您可以将两列都添加到 by 参数中:

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