R dataframe:查找具有最大分数的重复值的索引

R dataframe:查找具有最大分数的重复值的索引,r,dataframe,duplicates,R,Dataframe,Duplicates,假设我有一个数据帧,如: x = c("a", "b", "b", "c", "c") y = c(1, 5, 4, 2, 3) d = data.frame(x, y) 我需要删除x中的重复项,方法是取y值最高的x。我需要得到与要保留的行对应的真/假向量,如: v = c(TRUE, TRUE, FALSE, FALSE, TRUE) 谢谢 如果需要获取逻辑索引 as.logical(with(d, ave(y, x, FUN=function(.y) .y==max(.y)))) #

假设我有一个数据帧,如:

x = c("a", "b", "b", "c", "c")
y = c(1, 5, 4, 2, 3)
d = data.frame(x, y)
我需要删除x中的重复项,方法是取y值最高的x。我需要得到与要保留的行对应的真/假向量,如:

v = c(TRUE, TRUE, FALSE, FALSE, TRUE)

谢谢

如果需要获取逻辑索引

 as.logical(with(d, ave(y, x, FUN=function(.y) .y==max(.y))))
 #[1]  TRUE  TRUE FALSE FALSE  TRUE

或使用
data.table

  library(data.table)
  setDT(d)[,list(y==max(y)), by=x]$V1
  #[1]  TRUE  TRUE FALSE FALSE  TRUE
  setDT(d)[, list(y=max(y)), by=x]
如果只想删除行,请执行以下操作:

  d[with(d, ave(y,x, FUN=max)==y),]
或用于
数据。表

  library(data.table)
  setDT(d)[,list(y==max(y)), by=x]$V1
  #[1]  TRUE  TRUE FALSE FALSE  TRUE
  setDT(d)[, list(y=max(y)), by=x]

aggregate(d[“y”],d[“x”],max)
@nicola:优雅的答案。”“聚合”通常需要(公式、数据、fn)或(数据、by、fn)参数。这(第1列、第2列、fn列)是如何工作的?单方括号是关键<代码>聚合需要列表(或数据帧)作为前两个参数
d[“y”]
是一个只有一列的数据帧(因此也是一个列表),而
d[[“y”]
只是一个数组。