R,因子的最大值

1 r max

嗨,如果有问题,请重定向 - 我不能直接看到它.

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

我想生成一个摘要,其中包含:每个唯一ID的1个条目,其最大分数超过36行.

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

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

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

如果它在Excel中,它将相当于一个简单的Pivot表 - 但我想学习如何在R中有效地做到这一点.

非常感谢

akr*_*run 5

您可以使用其中一个聚合函数.在base R.我们可以使用aggregate公式方法.在.上的LHS ~指定除了分组变量"ID",这是上的RHS所有其他变量~.我们指定maxas FUN,它将给出max按"ID"分组的每列值的摘要数据集.

aggregate(.~ID, df, FUN=max)
Run Code Online (Sandbox Code Playgroud)

或者另一个选择是dplyr.我们按"ID"进行分组,并summarise_eachmax内部使用funs以获取max每列的值.

library(dplyr)
df %>%
   group_by(ID) %>%
   summarise_each(funs(max))
Run Code Online (Sandbox Code Playgroud)

或者我们可以将'data.frame'转换为'data.table'(setDT(df)).通过"ID"列分组,我们max通过循环使用Data.table(.SD)的子集来获取每列的内容lapply.

 library(data.table)
 setDT(df)[,lapply(.SD, max) , by = ID]
Run Code Online (Sandbox Code Playgroud)

如果只有"ID"以外的单列,我们可以使用summarise而不是summarise_eachie

   df %>%
      group_by(ID) %>%
      summarise(score=max(score))
Run Code Online (Sandbox Code Playgroud)

对于data.table单列,类似的代码是

  setDT(df)[, list(score=max(score)), by = ID] 
Run Code Online (Sandbox Code Playgroud)