2015-07-13 92 views
1

嗨,如果這個問題已被詢問,請重定向 - 我不能直接看到它。R,因子的最大值

我想用R,並且有一個簡單的數據框: 第一列是一個ID,第二個是分數。 每個ID有36行和相應的分數。 有幾千個ID。

我想爲每個唯一ID生成一個摘要,其中包含: 1個條目,其最大分數超過其36行。

我也是剛接觸R,但瞭解以下內容:

應用(數據幀,2,最大值)將給予最大的,而不是由ID進行細分。

我知道有一系列「應用」功能可以在桌子上應用功能,但我不知道如何組合以獲得我想要的功能。

如果是在Excel中這將是一個簡單的透視表相當於 - 但我想學習如何有效地做到這一點在R.

非常感謝

回答

4

您可以使用聚集的一個功能。在base R。我們可以使用公式方法使用aggregate~的LHS上的.指定除~的RHS上的分組變量「ID」之外的所有其他變量。我們將max指定爲FUN,它將給出按ID分組的每個列的max值的摘要數據集。

aggregate(.~ID, df, FUN=max) 

或者其他選項是dplyr。我們按照'ID'進行分組,並使用summarise_eachmaxfuns之內以獲得每列的max值。

library(dplyr) 
df %>% 
    group_by(ID) %>% 
    summarise_each(funs(max)) 

或者,我們可以轉換 'data.frame' 到 'data.table'(setDT(df))。按'ID'列分組,我們通過循環Data.table的子集(.SD)與lapply得到每列的max

library(data.table) 
setDT(df)[,lapply(.SD, max) , by = ID] 

如果有一個以上的「ID」等只有單一的專欄中,我們可以使用的summarise代替summarise_each即在一列的情況下data.table

df %>% 
     group_by(ID) %>% 
     summarise(score=max(score)) 

相似的代碼是

setDT(df)[, list(score=max(score)), by = ID] 
+1

傑出。我的第一篇文章和一個很好的答案來幫助我解決問題 - 非常感謝。 – james