我想在与同一列中的每一行具有绝对最低差的列中找到值。
我已经尝试过find value closest to x by group in dplyr和return 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 = 1690
和id = 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
使用我几年前问的一个问题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)