亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何按組計算唯一值的數量?

如何按組計算唯一值的數量?

侃侃爾雅 2019-10-30 13:05:13
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貢獻1858條經驗 獲得超8個贊

我認為您在這里錯了。無需使用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-10-30
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

我只是說所有提供的答案都使用基本R length(unique(x))組合,現在可以通過使用data.tabledplyr特殊/高效(用C / C ++代碼編寫)函數避免使用。盡管OP也可能也需要:=操作員,但我相信這不是主要問題。

查看完整回答
反對 回復 2019-10-30
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

這就是我說(最新)data.table解決方案的原因。它不包含新data.table::uniqueN()功能。data.table那里的解決方案基本上是一個基本解決方案

查看完整回答
反對 回復 2019-10-30
  • 3 回答
  • 0 關注
  • 683 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號