您可以使用聚集的一个功能。在base R
。我们可以使用公式方法使用aggregate
。 ~
的LHS上的.
指定除~
的RHS上的分组变量“ID”之外的所有其他变量。我们将max
指定为FUN
,它将给出按ID分组的每个列的max
值的摘要数据集。
aggregate(.~ID, df, FUN=max)
或者其他选项是dplyr
。我们按照'ID'进行分组,并使用summarise_each
和max
在funs
之内以获得每列的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]
杰出。我的第一篇文章和一个很好的答案来帮助我解决问题 - 非常感谢。 – james