R 按最接近定义值的组进行的子设置

R 按最接近定义值的组进行的子设置,r,dplyr,subset,R,Dplyr,Subset,我有一个数据框,我想在每个组中选择y最接近特定值的行(例如:5) 谢谢你,Philippeval或者使用base R: df %>% group_by(x) %>% mutate( delta = abs(y - 5) ) %>% filter(delta == min(delta)) %>% select(-delta) df[do.call(c, tapply(df$y, df$x, function(x) x-5 == max(x -

我有一个数据框,我想在每个组中选择
y
最接近特定值的行(例如:5)


谢谢你,Philippe

val或者使用base R:

df %>%
  group_by(x) %>%
  mutate(
    delta = abs(y - 5)
  ) %>%
  filter(delta == min(delta)) %>%
  select(-delta)
 df[do.call(c, tapply(df$y, df$x, function(x) x-5 == max(x - 5))),]
  x y          z
1 A 4 -1.2070657
2 A 4  0.2774292
5 B 6  0.4291247
6 B 6  0.5060559

这是一个带有
数据表的选项。将'data.frame'转换为'data.table'(
setDT(df)
),按'x'分组,我们创建并获取'y'与5的绝对差值,从差值中检查
min
的元素,获取行索引(
.I
),提取作为行索引的列(“V1”)并将数据集子集

library(data.table)
setDT(df)[df[, {v1 <- abs(y-5)
               .I[v1==min(v1)]}, x]$V1]
#   x y          z
#1: A 4 -1.2070657
#2: A 4  0.2774292
#3: B 6  0.4291247
#4: B 6  0.5060559
库(data.table)

setDT(df)[df[,{v1您不需要指定colsadd这不会使用
x
上的分组我指定cols是因为我不希望diff列包含在输出数据帧中,因为它实际上不应该是它的一部分。您可以将diff作为数据帧的向量输出
val <- 5
delta <- abs(val - df$y)
df <- df[delta == min(delta), ]
 df[do.call(c, tapply(df$y, df$x, function(x) x-5 == max(x - 5))),]
  x y          z
1 A 4 -1.2070657
2 A 4  0.2774292
5 B 6  0.4291247
6 B 6  0.5060559
library(data.table)
setDT(df)[df[, {v1 <- abs(y-5)
               .I[v1==min(v1)]}, x]$V1]
#   x y          z
#1: A 4 -1.2070657
#2: A 4  0.2774292
#3: B 6  0.4291247
#4: B 6  0.5060559