2016-04-16 96 views
0

的平均得分想象一個數據表的R - data.table - 計算uniq的柱平均分數

ID Score 
1  10 
1  13 
1  12 
2  10 
3  6 
3  6 

該表的average是9.5。這很容易使用mean

如果我想要每個獨特用戶的平均值,該怎麼辦?

用戶1的平均值是11.67。 平均用戶2是10 的平均用戶3 6

UniqAverage我找的是((11.67+10+6)/3) = 9.223`

這將是足夠簡單,使用一個循環做的,但我的巨大數據集,我想繼續努力學習如何在R中使用矢量做「正確」的方式。

我們甚至可以假設我已經有一個名爲Uniq的變量,其中包含Uniq ID的數量,如果有幫助的話。

對於複製的目的隨意使用...

library(data.table) 
df = data.frame(ID=c(1,1,1,2,3,3), Score1=c(10,13,12,10,6,6)) 
dt = data.table(df) 

我失敗的嘗試最近是

mean(dt[ unique(dt$ID), Score1]) 

我想通,將採取Score1平均每個ID,但它沒沒有什麼特別的。我得到了11.67這是錯誤的結果。

+2

我建議你去通過[護身符](https://github.com/Rdatatable/data.table/wiki/Getting-started)。 – Arun

+0

請問,謝謝。 – Jibril

回答

3

總體均值:

dt[,mean(Score1)]; 
## [1] 9.5 

平均數由ID:的手段

dt[,mean(Score1),ID]; 
## ID  V1 
## 1: 1 11.66667 
## 2: 2 10.00000 
## 3: 3 6.00000 

平均數:

dt[,mean(Score1),ID][,mean(V1)]; 
## [1] 9.222222 
+0

太棒了!爲了學習,讓我問一個簡短的問題。在那裏的第二個區塊,這個符號究竟意味着什麼? dt [,mean(Score1)]我認爲將返回所有行,Score1的平均值。身份證是幹什麼的?這似乎是你然後使用了太多的論點。 – Jibril

+0

第三個參數'by'通過一個或多個列對輸入進行分組,這意味着第二個參數'j'將爲每個組評估一次。請參閱https://cran.r-project.org/web/packages/data.table/data.table.pdf#page=4上的文檔。 – bgoldst

+0

非常感謝!一旦定時器結束,將接受你的答案。 – Jibril

1

使用dplyr

library(dplyr) 
res <- dt %>% 
     group_by(ID) %>% 
     summarise(Mean = mean(Score1)) 
res 
# ID  Mean 
# (dbl) (dbl) 
#1  1 11.66667 
#2  2 10.00000 
#3  3 6.00000 

平均的手段

res %>% 
    .$Mean %>% 
    mean 
#[1] 9.222222