首页 > 解决方案 > 在R中的列表中查找最接近的值

问题描述

我有一个与值关联的标签列表。对于值 x,我想找到与列表中最接近(但次要)值相对应的标签。

我找到了一种方法,但它看起来很混乱和复杂......

mylist <- list("A"=0.02,
               "B"=0.13,
               "C"=0.26)

x = 0.14 # B

df <- as.data.frame(t(as.data.frame(mylist)))
df <- tibble::rownames_to_column(df, "labels")
df$V2 <- x > df$V1
maxi <- max(df[df$V2 == TRUE,]$V1)
label <- df[df$V1 == maxi,]$labels

还有另一种简洁的方法吗?

标签: rlistfind

解决方案


x我们用 的每个值减去 的值mylist,过滤掉差值大于 0 的值,并选择names最小差值的 。

new <- x - unlist(mylist) 
names(which.min(new[new > 0]))
#[1] "B"

或者单线,我们只过滤那些小于的值x并从中选择max

names(which.max(sapply(mylist, function(i) i[(x - i) > 0])))
#[1] "B"

推荐阅读