2017-04-16 17 views
0

(問題的標題是可怕的,對不起,我很難找到一個精闢的方式來表達它。)在R中,如何在處理重複數據時有效地重新處理data.frame?

我有一個「高」data.frame,我編譯。它看起來像這樣:

id | rating 
----------- 
3 | 5.5 
4 | 6 
4 | 7 
5 | 3 
5 | 5 
6 | 7.5 
7 | 9 
... 

我想將其轉換成這樣:

id | avg rating 
----------- 
3 | 5.5 
4 | 6.5 
5 | 4 
6 | 7.5 
7 | 9 
... 

我不只是想刪除重複。我想獲取具有相同重複ID的行,刪除重複項,但將評分字段更新爲平均值。

我不知道如何去做這件事。我甚至不確定我是應該修改原始數據框還是使用修改的數據創建一個新數據框。 (注意:我認爲一個好的答案對於操作的具體細節有點不可知論,比如,如果我想做類似的事情,但是得到的評分列是總數或計數,希望你的答案也適用於這些情況。)

+3

只需使用'aggregate'和'mean'即可。即'聚合(評級〜ID,數據,平均)' –

+0

@RichScriven哇,每隔一段時間R使事情變得非常容易。謝謝!我不能從文檔中知道,聚合可以採用多種功能嗎?比如說,如果我想都採取平均和圓形的話。 – Zelbinian

+0

找出它:傳遞給FUN參數的匿名函數。 – Zelbinian

回答

1

您也可以選擇使用SQL語言,您是否熟悉它。
您將需要使用dplyr和包括總和例如一個版本的sqldf包library(sqldf)

sqldf(" select id, avg(rating) `avg_rating` from your_data group by id ")

0

library(dplyr) 
df %>% 
    group_by(id) %>% 
    summarize(avg_rating = mean(rating), 
      sum_rating = sum(rating))