在R中:通过排除自我比较,找到组_中最接近的值

在R中:通过排除自我比较,找到组_中最接近的值,r,dplyr,closest,R,Dplyr,Closest,我想在一列中找到与同一列中的每一行的差值绝对最小的值 我试过和的解决方案 我的代码: library(DescTools) data %>% select(river, dist, id) %>% group_by(river) %>% mutate(NNdist = Closest(dist, dist)) 对于id=TYWI03我希望NNdist=1690和id=TAFF04我希望NNdist=1607,但返回的值是参考值,即它从最近的(x,a)返回a 数

我想在一列中找到与同一列中的每一行的差值绝对最小的值

我试过和的解决方案

我的代码:

library(DescTools)
data %>% 
  select(river, dist, id) %>%
  group_by(river) %>% 
  mutate(NNdist = Closest(dist, dist))
对于
id=TYWI03
我希望
NNdist=1690
id=TAFF04
我希望
NNdist=1607
,但返回的值是参考值,即它从
最近的(x,a)
返回
a

数据

 river  dist id     NNdist
  <chr> <dbl> <chr>   <dbl>
1 Tywi     34 TYWI03     34
2 Tywi   1690 TYWI02   1690
3 Tywi   1747 TYWI01   1747
4 Taff   1607 TAFF05   1607
5 Taff   4341 TAFF04   4341
6 Taff  12357 TAFF03  12357
7 Taff  16111 TAFF02  16111
8 Taff  18124 TAFF01  18124
河区id NNdist
1泰威34泰威03 34
2 Tywi 1690 TYWI02 1690
3 Tywi 1747 TYWI01 1747
4塔夫绸1607塔夫绸05 1607
5塔夫绸4341塔夫绸04 4341
6塔夫绸12357塔夫绸03 12357
7塔夫绸16111塔夫绸02 16111
8塔夫绸18124塔夫绸01 18124

用我多年前提出的一个问题回答了这个问题

temp1%
组别(河流)%>%
变异(n_ds=match(dist,sort(dist))-1)%>%
mutate(最近的uid=apply(sappy(dist,function(i)abs(i-dist)),2,function(n)id[which(n==sort(n)[2]))%>%
data.frame()
tempdist%select(dist,id)%%>%rename(rivDist=dist)
temp2%left_join(tempdist,by=c('closest_uid'='id'))%>%
变异(Minist=abs(dist-rivDist)
temp1 <- data%>%
  group_by(river) %>%
  mutate(n_ds = match(dist,sort(dist))-1) %>%
  mutate(closest_uid=apply(sapply(dist, function(i)abs(i-dist)), 2, function(n) id[which(n==sort(n)[2])])) %>%
  data.frame()

tempdist <- temp1 %>% select(dist, id) %>% rename(rivDist = dist)

temp2 <- temp1 %>% left_join(tempdist, by = c('closest_uid' = 'id')) %>%
  mutate(mindist = abs(dist - rivDist)