R 根据某些条件删除重复的id

R 根据某些条件删除重复的id,r,duplicates,R,Duplicates,我们将“data.frame”转换为“data.table”(setDT(df)),按“id”分组,得到“age”与11的差值,找到最小绝对值(which.min(abs..)的索引,并对数据集进行子集(.SD) 编辑:@Pascal刚刚通知我们距离已经在“ageto11”中计算出来了。在这种情况下 library(data.table) setDT(df)[,.SD[which.min(abs(age-11))] , id] # id age ageto11 #1: 1 10.6

我们将“data.frame”转换为“data.table”(
setDT(df)
),按“id”分组,得到“age”与11的差值,找到最小绝对值(
which.min(abs..
)的索引,并对数据集进行子集(
.SD

编辑:@Pascal刚刚通知我们距离已经在“ageto11”中计算出来了。在这种情况下

library(data.table)
setDT(df)[,.SD[which.min(abs(age-11))] , id]
#    id  age ageto11
#1:  1 10.6     0.4
#2:  2 11.0     0.0
#3:  3 11.3     0.3
#4:  4 10.9     0.1
#5:  5 10.7     0.3
#6:  6 11.0     0.0
#7:  7 11.1     0.1
#8:  8 10.3     0.7
#9:  9 10.7     0.3
   id  age ageto11
2   1 10.6     0.4
3   2 11.0     0.0
4   3 11.3     0.3
5   4 10.9     0.1
7   5 10.7     0.3
8   6 11.0     0.0
10  7 11.1     0.1
12  8 10.3     0.7
13  9 10.7     0.3 
library(data.table)
setDT(df)[,.SD[which.min(abs(age-11))] , id]
#    id  age ageto11
#1:  1 10.6     0.4
#2:  2 11.0     0.0
#3:  3 11.3     0.3
#4:  4 10.9     0.1
#5:  5 10.7     0.3
#6:  6 11.0     0.0
#7:  7 11.1     0.1
#8:  8 10.3     0.7
#9:  9 10.7     0.3
setDT(df)[, .SD[which.min(ageto11)], id]