2015-06-23 95 views
2

我目前有一個R數據框,超過1,000個對象,每個對象都應該有唯一的第一個元素,但某些元素會多次出現,我想合併這些對象在一起,因此,例如,如果我有:R編程語言合併一個數據框中的對象

id frequency name 
1 43  George 
2 23  John 
3 3   Thomas 
2 17  John 
4 122  James 
5 32  Andrew 
6 67  Martin 
7 12  William 
1 3   George 
8 6   Zachary 
6 3   Martin 
9 55  Millard 

我希望把它做成這樣的事情(如果你發現每個人都用相同的ID具有所有的相同的信息,除了頻率),這裏的一切保持除了我將所有頻率添加到其他所有其他頻率之外(對於某些ID,可以有多達10個左右的重複頻率):

id frequency name 
1 46  George 
2 40  John 
3 3   Thomas 
4 122  James 
5 32  Andrew 
6 70  Martin 
7 12  William 
8 6   Zachary 
9 55  Millard 

回答

1

也可以用數據來完成。表。

library(data.table) 
df.dt <- data.table(df) 
df.dt[, .(freq=sum(freq)), by=.(id, name)] 

編輯

與阿倫

+0

這隻給出了頻率和名稱,但刪除了所有其他信息,例如我沒有發佈的ID和所有其他字段 –

+0

如何在分組中包含ID也如此: dt [,。(frequency = sum(frequency)),by =。(id,name)]'? – Arun

+0

@阿倫,很好我不知道這個語法,請看編輯 – JHowIX

1

很不容易的事與dplyr結合基礎R unique

dd <- dat %>% group_by(name) %>% mutate(frequency = sum(frequency)) 
unique(dd) 
Source: local data frame [9 x 3] 
Groups: name 

    id frequency name 
1 1  46 George 
2 2  40 John 
3 3   3 Thomas 
4 4  122 James 
5 5  32 Andrew 
6 6  70 Martin 
7 7  12 William 
8 8   6 Zachary 
9 9  55 Millard 
+0

的ID從他們消失在你的答案,但我也有,我從這裏省略了其他列我希望保持一致(每個重複出現的每一列都是相同的) –

1

假設DF是你data.frame,那麼你可以使用aggregate

> result <- aggregate(frequency~id+name, sum, data=DF) 
> result[order(result$id), ] 
    id name frequency 
2 1 George  46 
4 2 John  40 
7 3 Thomas   3 
3 4 James  122 
1 5 Andrew  32 
5 6 Martin  70 
8 7 William  12 
9 8 Zachary   6 
6 9 Millard  55 
+1

'id's也總結了一下。我認爲Zachary的意圖不應該歸結。 – SabDeM

+0

@SabDeM我想在這裏你看到了行名。 ID不總結 –

1

評論使用ddply

library('plyr') 
ddply(dat, .(id,name), summarize, frequency = sum(frequency)) 

# id name frequency 
#1 1 George  46 
#2 2 John  40 
#3 3 Thomas   3 
#4 4 James  122 
#5 5 Andrew  32 
#6 6 Martin  70 
#7 7 William  12 
#8 8 Zachary   6 
#9 9 Millard  55 
+1

非常乾淨的解決方案與'plyr'我喜歡它。 – SabDeM