2015-07-13 104 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