2016-07-28 90 views
0

我有以下tbl_df;總計2行不同變量dplyr

V1 V2 
abc 39 
12bc 15 
87gd 3 
987 50 

正巧變量abc和可變12bc意味着同樣的事情。我想運行一個dplyr腳本來添加V2上的值來合併兩行,隱藏或刪除以前的行並創建一個新行。 tbl_df最終將如下所示:

V1 V2 
abc 54 => where abc is the sum of previous abc and 12bc 
87gd 3 
987 50 

預先感謝您!

+1

如何知道'abc'和'12bc'是指同一件事物 - 是它*只是*你想合併的那兩個,還是合併一組更大的值對(或組) ? –

+0

abc在舊版本中具有含義,在新版本中將其改爲12bc。 – Gilbert

+0

你有這種匹配查找表嗎?或者它只有1例abc到12bc? – zx8754

回答

1

如果你不想使用plyr,這可能工作!

new_df <- old_df %>% 
    mutate(V1 = ifelse(V1 == "12bc", "abc", V1) %>% 
    group_by(V1) %>% 
    summarise(V2 = sum(v2)) 
+0

這正是我需要的。非常感謝你!!! – Gilbert

1

分兩步進行:首先用新值替換「舊」V1值,然後按V1進行分組並彙總。

plyr包中有一個revalue函數可用於替換值。首先創建一個矢量與所有你想要的替代品(如果它的只有6家,如您在您的評論指定,這不應該是一個問題)

replacements <- c("12bc" = "abc") # put other pairs in, separated by commas 

然後,您可以在相同的步驟升值和組總結之前:

newdata <- mydata %>% 
    group_by(V1 = plyr::revalue(V1, replacements)) %>% 
    summarize(V2 = sum(V2)) 

請注意,這假定您沒有任何列,除了V1和V2。如果你這樣做,你需要指定他們如何得到總結(如果它們在舊版本和新版本之間有所不同,怎麼辦?)

+0

'dplyr :: summarize()'...做'plyr :: summarize()'關心'group_by'嗎? – Dambo

+2

@Dambo不,但我不是在做'library(plyr)'。相反,我指定'plyr :: revalue'(它不會將plyr加載到名稱空間中),這是一個很好的做法,同時使用 –

+0

謝謝,這是我僅僅使用幾個函數時要記住的事情一個庫 – Dambo