2017-04-19 37 views
1

我正在處理一個包含大約200行的數據框,我想刪除重複的行,將「分鐘」列中的值加在一起。我對R相當陌生,而且我還沒有找到辦法做到這一點。它涉及到應用正則表達式嗎?我真的很感激任何解決方案!如何基於R中的字符串匹配來聚合數據框中的行? - 正則表達式

數據幀我有看起來像這樣:

df <- data.frame(name = c("Adam Tucker", "AdamTucker", "[email protected]", "adamtucker", "James Mirra", "JamesTMirra", "Sebastian F"), minutes = c(10, 3, 15, 2, 5, 1, 10)) 

        name minutes 
       Adam Tucker  10 
       AdamTucker  3 
[email protected]  15 
       adamtucker  2 
       James Mirra  5 
       JamesTMirra  1 
       Sebastian F  10 

我期待的結果是這樣的:

 name minutes 
Adam Tucker  30 
James Mirra  6 
Sebastian F  10 

提前感謝!

+2

自動識別像「AdamTucker」和「[email protected]」這樣的東西屬於同一個人並不是最簡單的事情。你有任何其他信息可以用來識別這些人嗎?否則可能需要一些手動清潔。 – Marius

+0

不幸的是,我沒有任何其他信息。我猜測一個程序化的解決方案是不夠的 - 特別是對於那種情況 - 但是因爲我只是一個初學者,所以我想問問問題以防萬一。順便說一下,你會如何手動解決這個例子?謝謝! – Claudia

+0

我會手動編輯數據(在原始的csv文件或其他內容中),添加一個新的列'cleaner_name',在那裏我以標準格式爲每行寫出名稱。之後,你可以自動完成聚合。 – Marius

回答

0

您是否擁有包含所有唯一名稱的主列表?你也許可以看看pmatach包R,或使用sqldf包類似功能

df <- data.frame(name = c("Adam Tucker", "AdamTucker", "[email protected]", "adamtucker", "James Mirra", "JamesTMirra", "Sebastian F"), minutes = c(10, 3, 15, 2, 5, 1, 10)) 
require(sqldf) 
sqldf("select * from df where name LIKE '%adam%'") 

#      name minutes 
1    Adam Tucker  10 
2    AdamTucker  3 
3 [email protected]  15 
4    adamtucker  2 

然後使用水平,以重新分配每個相同的名稱或只加在這裏與名稱另一列使用說亞當·塔克的最終版本和合並原始數據使用名稱列作爲關鍵字。

+0

我可以要求最終名字的主列表!我也會查找pmatach包。謝謝! – Claudia