您可以使用其中一个聚合函数.在base R.我们可以使用aggregate公式方法.在.上的LHS ~指定除了分组变量"ID",这是上的RHS所有其他变量~.我们指定maxas FUN,它将给出max按"ID"分组的每列值的摘要数据集.
aggregate(.~ID, df, FUN=max)
Run Code Online (Sandbox Code Playgroud)
或者另一个选择是dplyr.我们按"ID"进行分组,并summarise_each在max内部使用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)