对于R data.table,如何使用uniqueN()来计算多列中的唯一/不同值?
问题描述:
比方说,我们有下列R- data.table
(虽然dataframe
原则是罚款以及):对于R data.table,如何使用uniqueN()来计算多列中的唯一/不同值?
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
值是无关紧要的---我想算的唯一编号行了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
参数的详细列?
答
要回答你的问题,是的,你可以两个栏添加到by
说法:
dt[, .(distinct_groups = uniqueN(order_no)), by = c("Name", "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][]
如果您想编辑以改进它,我会说:让它可以由其他人在新打开的R控制台中通过复制粘贴来进行输入;并确保显示的所需输出已完成并对应于输入。无论如何,这个链接的问题是不是涵盖了它? – Frank
@Frank是的,我想删除这个问题。谢谢 – ShanZhengYang
嗯,我认为你现在应该可以删除它(使用底部的链接)。如果你认为这会有所帮助,我可以放弃它。 – Frank