如何按组计算唯一值的数量?

ID= c('A', 'A', 'A', 'B', 'B', 'B')

color=c('white', 'green', 'orange', 'white', 'green', 'green')


d = data.frame (ID, color)

我想要的结果是


unique_colors=c(3,3,3,2,2,2)

d = data.frame (ID, color, unique_colors)

或在新数据框中更清晰c


ID= c('A','B')

unique_colors=c(3,2)

c = data.frame (ID,unique_colors)

我试过的不同组合aggregate和ave以及by和with我想这是这些功能的组合。


解决方案包括:


length(unique(d$color))

计算唯一元素的数量。


江户川乱折腾
浏览 611回答 3
3回答

回首忆惘然

我认为您在这里错了。无需使用plyr或<-使用data.table。v> = 1.9.6的最新版本data.table具有一个新功能uniqueN()。library(data.table) ## >= v1.9.6setDT(d)[, .(count = uniqueN(color)), by = ID]#&nbsp; &nbsp; ID count# 1:&nbsp; A&nbsp; &nbsp; &nbsp;3# 2:&nbsp; B&nbsp; &nbsp; &nbsp;2如果要使用计数创建新列,请使用:=运算符setDT(d)[, count := uniqueN(color), by = ID]或具有dplyr使用n_distinct功能library(dplyr)d %>%&nbsp; group_by(ID) %>%&nbsp; summarise(count = n_distinct(color))# Source: local data table [2 x 2]#&nbsp;#&nbsp; &nbsp;ID count# 1&nbsp; A&nbsp; &nbsp; &nbsp;3# 2&nbsp; B&nbsp; &nbsp; &nbsp;2或者(如果您想要新的列)使用mutate代替summaryd %>%&nbsp; group_by(ID) %>%&nbsp; mutate(count = n_distinct(color))

守着星空守着你

我只是说所有提供的答案都使用基本R&nbsp;length(unique(x))组合,现在可以通过使用data.table和dplyr特殊/高效(用C / C ++代码编写)函数避免使用。尽管OP也可能也需要:=操作员,但我相信这不是主要问题。

宝慕林4294392

这就是我说(最新)data.table解决方案的原因。它不包含新data.table::uniqueN()功能。data.table那里的解决方案基本上是一个基本解决方案
打开App,查看更多内容
随时随地看视频慕课网APP