這是數據:到一個新列添加最大值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」列?
我做了一些與聚合函數的研究,但我仍然無法找到解決方案。
請幫
這是數據:到一個新列添加最大值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」列?
我做了一些與聚合函數的研究,但我仍然無法找到解決方案。
請幫
我們可以通過功能,這確實允許以創建一個列,而不是僅僅summarise
輸出使用組之一。 data.table
選項是漸變的,因爲作業(:=
)將創建一個新列。我們將'data.frame'轉換爲'data.table',按'a'分組,獲得'b'的最大值(max(b)
)並將其分配爲(:=
)作爲新列。如果我們需要摘要,請使用list
而不是:=
進行包裝。
library(data.table)
setDT(df1)[, Max:= max(b), a]
或使用來自base R
ave
。這是罕見的基本函數之一,它將輸出與原始數據集的行數相同。作爲第一個參數,我們使用變量來獲得第二,第三等的max
(如果有的話)將成爲分組列。指定FUN
。默認情況下,如果我們沒有指定任何FUN
,它將按組的方式執行mean
。
df1$Max <- with(df1, ave(b, a, FUN=max)
或dplyr
。 dplyr
和data.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