2016-02-25 50 views
1

這是數據:到一個新列添加最大值R中

a <- c(1,1,2,2,3) 
b <- c(1,3,5,9,4) 
df1 <- data.frame(a,b) 
df1 

a b 
1 1 
1 3 
2 5 
2 9 
3 4 

我想是這樣的:

a b max 
1 1 3 
1 3 3 
2 5 9 
2 9 9 
3 4 4 

我的問題:我如何計算「最大」欄目組由「a」列中值爲「b」列?

我做了一些與聚合函數的研究,但我仍然無法找到解決方案。

請幫

回答

1

我們可以通過功能,這確實允許以創建一個列,而不是僅僅summarise輸出使用組之一。 data.table選項是漸變的,因爲作業(:=)將創建一個新列。我們將'data.frame'轉換爲'data.table',按'a'分組,獲得'b'的最大值(max(b))並將其分配爲(:=)作爲新列。如果我們需要摘要,請使用list而不是:=進行包裝。

library(data.table) 
setDT(df1)[, Max:= max(b), a] 

或使用來自base Rave。這是罕見的基本函數之一,它將輸出與原始數據集的行數相同。作爲第一個參數,我們使用變量來獲得第二,第三等的max(如果有的話)將成爲分組列。指定FUN。默認情況下,如果我們沒有指定任何FUN,它將按組的方式執行mean

df1$Max <- with(df1, ave(b, a, FUN=max) 

dplyrdplyrdata.table解決方案可以靈活地獲取summary或獲取原始數據集的新列。用dplyr,在我們按'a'分組後,使用mutate創建一個新列。相反,如果我們需要彙總版本,則summarise函數可以替代mutate(它將產生與aggregate類似的輸出)。

library(dplyr) 
df1 %>% 
    group_by(a) %>% 
    mutate(Max = max(b)) 
#  a  b Max 
# (dbl) (dbl) (dbl) 
#1  1  1  3 
#2  1  3  3 
#3  2  5  9 
#4  2  9  9 
#5  3  4  4 
相關問題