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

时间:2014-09-17 14:16:33

标签: 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。我需要得到一个与要保留的行相对应的TRUE / FALSE向量,如:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您需要获得逻辑索引

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

或者

 with(d, ave(y,x, FUN=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

如果您只想删除行:

  d[with(d, ave(y,x, FUN=max)==y),]

data.table

  setDT(d)[, list(y=max(y)), by=x]