确定data.frame中最接近指定值的条目

确定data.frame中最接近指定值的条目,r,dataframe,R,Dataframe,我有一个输入“值”,我想从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

我有一个输入“值”,我想从
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)))]

因此,我想从数据框“data”的前两列中找出最接近的输入“value”数。提前感谢。

您可以使用
unlist()
从两列中创建一个向量,然后在其中找到最接近的值:

vec <- unlist(df[,c(1,2)]) # create vector
vec[which.min(abs(vec - value))] # find nearest value
#Min_Benefs8 
#      20000 

vec您可以使用
unlist()
从两列中创建一个向量,然后在其中找到最接近的值:

vec <- unlist(df[,c(1,2)]) # create vector
vec[which.min(abs(vec - value))] # find nearest value
#Min_Benefs8 
#      20000 

vec节省计算时间,只提供布尔向量。所有这些嵌套的东西都会降低代码的可读性

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::筛选器(x tmpin)%>%
总结(minum=ifelse(x+y>2*tmpin,x,y))

但它并不像另一个答案中建议的那样短。

节省计算时间,只提供一个布尔向量。所有这些嵌套的东西都会降低代码的可读性

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::筛选器(x tmpin)%>%
总结(minum=ifelse(x+y>2*tmpin,x,y))
但它并不像另一个答案中所说的那么短