我们说我有一个类似的数据框:
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)
谢谢!
答案 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]