R 计算三列之间的最小差值,并给出相应的值

R 计算三列之间的最小差值,并给出相应的值,r,dplyr,R,Dplyr,假设我有如下数据 data required_value Value1 Value2 Value3 0.5 .1 0.3 0.4 1.0 1 0.7 0.2 1.5 .37 0.3

假设我有如下数据

data

required_value          Value1          Value2        Value3
     0.5                  .1              0.3           0.4
     1.0                   1              0.7           0.2
     1.5                  .37             0.3           0.7
     2.0                  1.25            0.9           1.9
我想找出三列VALUE1、Value2、Value3中哪一列最接近所需的值,然后创建一个新列,并在此处获得最接近的值

我的示例输出是

data

required_value          Value1          Value2        Value3       output
     0.5                  .1              0.3           0.4         0.4
     1.0                   1              0.7           0.2         1.0 
     1.5                  .37             0.3           0.7         0.7
     2.0                  1.25            0.9           1.9         1.9
下面是我的努力,

max.col(-abs(sweep(data[-1], 1, data$required_value)),"first")
这给了我最近的一列。但是我想找到相应的值

有人能帮我做这件事吗


感谢

从列id到最终解决方案,只差一步。您可以使用Hadley Wickhams Advanced R:中描述的矩阵子集。通过使用已经检测到的列构建子集矩阵,对于行,您可以只使用一个运行编号

df <- read.table(text = "required_value          Value1          Value2        Value3
                             0.5                  0.1              0.3           0.4
                             1.0                   1              0.7           0.2
                             1.5                  0.37             0.3           0.7
                             2.0                  1.25            0.9           1.9", header = TRUE)

min_id     <- max.col(-abs(sweep(df[-1], 1, df$required_value)),"first")
df$min_div <- df[cbind(1:4, min_id + 1)]

     df
#    required_value Value1 Value2 Value3 min_div
# 1            0.5   0.10    0.3    0.4     0.4
# 2            1.0   1.00    0.7    0.2     1.0
# 3            1.5   0.37    0.3    0.7     0.7
# 4            2.0   1.25    0.9    1.9     1.9

一艘不太漂亮的客轮:

apply(data, 1, function(x) x[-1][which.min(abs(x[-1] - x[1]))])
# 0.4 1.0 0.7 1.9