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”]
只是一个数组。