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))
计算唯一元素的数量。
答案 0 :(得分:63)
我认为你在这里弄错了。使用plyr
时,<-
或data.table
都不需要。
data.table 的最新版本,v&gt; = 1.9.6,只有一个新功能uniqueN()
。
library(data.table) ## >= v1.9.6
setDT(d)[, .(count = uniqueN(color)), by = ID]
# ID count
# 1: A 3
# 2: B 2
如果要创建包含计数的新列,请使用:=
运算符
setDT(d)[, count := uniqueN(color), by = ID]
或dplyr
使用n_distinct
功能
library(dplyr)
d %>%
group_by(ID) %>%
summarise(count = n_distinct(color))
# Source: local data table [2 x 2]
#
# ID count
# 1 A 3
# 2 B 2
或(如果您想要新列)使用mutate
代替summary
d %>%
group_by(ID) %>%
mutate(count = n_distinct(color))