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

问题描述 投票:0回答:1

我想在与同一列中的每一行具有绝对最低差的列中找到值。

我已经尝试过find value closest to x by group in dplyrreturn index from a vector of the value closest to a given element的解决方案

我的代码:

library(DescTools)
data %>% 
  select(river, dist, id) %>%
  group_by(river) %>% 
  mutate(NNdist = Closest(dist, dist))

对于id = TYWI03,我期望NNdist = 1690id = TAFF04我期望NNdist = 1607,但返回的值是参考值,即从a返回Closest(x, a)

data

 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
r dplyr closest
1个回答
0
投票

使用我几年前问的一个问题Count values less than x and find nearest values to x by multiple groups回答了它>

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)
© www.soinside.com 2019 - 2024. All rights reserved.