我有一个输入"值"我想找出R
value = 20003
数据
Min_Benefs Max_Benefs MSR_Min MSR_Max
5000 5999 0.039 0.036
6000 6999 0.036 0.034
7000 7999 0.034 0.032
8000 8999 0.032 0.031
9000 9999 0.031 0.03
10000 14999 0.03 0.027
15000 19999 0.027 0.025
20000 49999 0.025 0.022
50000 59999 0.022 0.02
60000 0.02 0.02
预期输出
20000
尝试:
closestLoc = which(min(abs(data[,c(1,2)]-value)))
closestVal = data[,c(1,2)][which(min(abs(data[,c(1,2)]-value)))]
所以,我想找出最近的输入数字"值"来自数据框的前两列"数据"。提前谢谢。
答案 0 :(得分:3)
您可以使用unlist()
从两列创建单个向量,然后在其中找到最接近的值:
vec <- unlist(df[,c(1,2)]) # create vector
vec[which.min(abs(vec - value))] # find nearest value
#Min_Benefs8
# 20000
答案 1 :(得分:0)
节省计算时间并仅提供布尔矢量。所有这些嵌套的东西都会降低你的代码的可读性,imho。
blah <- data.frame(x = seq.int(10)*1000, y = seq.int(10)*1000 + 999)
tmpin <- 9003
blah %>% dplyr::filter(x <= tmpin & y > tmpin)
# OR
blah[with(blah, x <= tmpin & y > tmpin),]
# OR
base::subset(blah, x <= tmpin & y > tmpin)
编辑:我在开始时误解了这个问题。不过,可以进行简单的扩展:
blah %>%
dplyr::filter(x <= tmpin & y > tmpin) %>%
summarise(minum = ifelse(x + y > 2*tmpin, x ,y))
但它没有其他答案所建议的那么短。