对于R data.table,如何使用uniqueN()在多个列中统计唯一/不同的值?
假设我们有以下R对于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
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")]