为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2019-12-16 12:12:33
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)或在新数据框中更清晰cID= c('A','B')unique_colors=c(3,2)c = data.frame (ID,unique_colors)我试过的不同组合aggregate和ave以及by和with我想这是这些功能的组合。解决方案包括:length(unique(d$color))计算唯一元素的数量。
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我认为您在这里错了。无需使用plyr或<-使用data.table。


v> = 1.9.6的最新版本data.table具有一个新功能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))



查看完整回答
反对 回复 2019-12-17
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-12-17
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这就是我说(最新)data.table解决方案的原因。它不包含新data.table::uniqueN()功能。data.table那里的解决方案基本上是一个基本解决方案

查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 580 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信