2015-05-15 34 views
1

假設我有這樣一個數據幀的獨特元素的最大數量:的R - 矩陣發生給定值

> id = c(1,1,1,1,1,2,2,2,3,3) 
> type = c("a","a","b","c","a","a","b","c","a","c") 
> data = data.frame(id,type) 
> data 
    id type 
1 1 a 
2 1 a 
3 1 b 
4 1 c 
5 1 a 
6 2 a 
7 2 b 
8 2 c 
9 3 a 
10 3 c 

我想了解一下什麼是每獨特類型的最大數量ID,但是不是值中的最大值。基礎包裝中是否有一個襯墊?謝謝。

回答

4

您可以嘗試

library(data.table)#v1.9.5+ 
setDT(data)[, list(type=uniqueN(type)) ,id] 

或者

library(dplyr) 
data %>% 
    group_by(id) %>% 
    summarise(type= n_distinct(type)) 

或者使用base R

aggregate(type~id, data, FUN=function(x) length(unique(x))) 
+0

沒有從基礎包裝? – Marius

+0

@Marius你可以使用'aggregate(Type〜id,data,FUN = function(x)length(unique(x)))' – akrun

+0

True。使用聚合,然後我只從聚合列中獲取最大值。謝謝。您可以在問題的答案中添加聚合解決方案,以便將其標記爲正式答案。再次感謝 – Marius

0

此行的複雜代碼,尋找能爲你做的伎倆:

apply(table(data), MARGIN = 1, FUN = function(x)names(which(x==max(x))))

讓我分解代碼,使其更簡單。

我們可以使用table(data)來獲得每個id中唯一類型數據框的統計信息。這是運行上面代碼片段的結果。

type 
id a b c 
    1 3 1 1 
    2 1 1 1 
    3 1 0 1 

所以我們可以看到,id 1中有3個a,而id 2中有1個,a,b和c等等。

現在,轉到複雜的代碼 - 它只會給每個id具有最大數量的col-names(type)。 看到幫助applywhich

我希望這回答了這個問題。 讓我知道你是否需要進一步澄清這一點。

編輯:捉迷藏的一個襯墊的結果給出如下:

$`1` 
[1] "a" 

$`2` 
[1] "a" "b" "c" 

$`3` 
[1] "a" "c" 

即用型在每個ID 就是你問什麼最大計數,不是嗎?