R,因子的最大值

时间:2015-07-13 11:46:24

标签: r max

嗨,如果问过这个问题,请重定向 - 我看不到它。

我想使用R,并拥有一个简单的数据帧: 第一列是ID,第二列是分数。 每个ID有36行和相应的分数。 有几千个ID。

我想生成一个包含以下内容的摘要: 每个唯一ID的1个条目,其最高分为36行。

我也是R的新手,但知道以下内容:

apply(dataframe,2,max)将给出最大值,但不会按ID分解。

我知道有一系列“应用”函数可以在表上应用函数,但我不知道如何组合以获得我想要的东西。

如果它在Excel中,它将相当于一个简单的Pivot表 - 但我想学习如何在R中有效地完成它。

非常感谢

1 个答案:

答案 0 :(得分:5)

您可以使用其中一个聚合函数。在base R。我们可以使用公式方法aggregate.的LHS上的~指定除分组变量&ID; ID'之外的所有其他变量。这是~的RHS。我们将max指定为FUN,它将为每个列的max值提供一个摘要数据集,按ID'

分组。

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

或另一个选项是dplyr。我们按照ID'分组并在summarise_each内使用maxfuns一起获取每列的max值。

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

或者我们可以转换' data.frame'到' data.table' (setDT(df))。由ID'组成的ID'在列中,我们通过使用max循环Data.table(.SD)的子集来获取每列的lapply

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

如果除了" ID"之外只有一列,我们可以使用summarise代替summarise_each,即

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

如果是单列,data.table的类似代码是

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