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

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

如何按組將唯一值的計數添加到R數據中。

如何按組將唯一值的計數添加到R數據中。

慕森卡 2019-06-26 13:45:55
如何按組將唯一值的計數添加到R數據中。我希望通過分組第二個變量來計數唯一值的數量,然后將計數作為一個新列添加到現有的data.framework中。例如,如果現有的數據框架如下所示:  color  type1 black chair2 black chair3 black  sofa4 green  sofa5 green  sofa6   red  sofa7   red plate8  blue  sofa9  blue plate10 blue chair我想為每個color,唯一的數types現有數據:  color  type unique_types1 black chair            22 black chair            23 black  sofa            24 green  sofa            15 green  sofa            16   red  sofa            27   red plate            28  blue  sofa            39  blue plate            310 blue chair            3我希望用ave,但似乎找不到一個直接的方法,不需要很多行。我有>100,000行,所以我也不確定效率有多重要。它有點類似于這個問題:每組計數觀察/行數,并將結果添加到數據幀中
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

使用ave(既然你特別要求):

within(df, { count <- ave(type, color, FUN=function(x) length(unique(x)))})

確保type是字符向量而不是因子。


因為您還說您的數據是巨大的,因此速度/性能可能是一個因素,我建議data.table也有解決辦法。

require(data.table)setDT(df)[, count := uniqueN(type), by = color] # v1.9.6+# if you don't want df to be modified by referenceans = as.data.table(df)[, count := uniqueN(type), by = color]

uniqueNv1.9.6是一個更快的等價物length(unique(.))..此外,它還可以處理data.framework/data.table。


其他解決辦法:

使用plyr:

require(plyr)ddply(df, .(color), mutate, count = length(unique(type)))

使用aggregate:

agg <- aggregate(data=df, type ~ color, function(x) length(unique(x)))merge(df, agg, by="color", all=TRUE)


查看完整回答
反對 回復 2019-06-26
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

下面是一個解決方案dplyr包裹-它有n_distinct()作為包裝length(unique()).

df %>%
  group_by(color) %>%
  mutate(unique_types = n_distinct(type))


查看完整回答
反對 回復 2019-06-26
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

這也可以在沒有組操作的向量化中實現,方法是unique帶著tabletabulate

如果df$colorfactor,然后

任一

table(unique(df)$color)[as.character(df$color)]# black black black green green   red   red  blue  blue  blue #    2     2     2     1     1     2     2     3     3     3

tabulate(unique(df)$color)[as.integer(df$color)]# [1] 2 2 2 1 1 2 2 3 3 3

如果df$colorcharacter然后.

table(unique(df)$color)[df$color]

如果df$colorinteger然后.

tabulate(unique(df)$color)[df$color]


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 806 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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