将向量X设置为其他2个向量中最接近向量Y的值

时间:2018-07-26 08:30:11

标签: r

数据框为

**Y    Y1    Y2     

58   65    59     
60   61    61.4   
56   52    78     
64   78    80** 

我的预期输出应如下所示,其中X应引用Y,并在Y1,Y2中选择一个值,该值会更近。
X是我期望的新输出列,Y是参考列。

Y    Y1    Y2     X

58   65    59     59
60   61    61.4   61
56   52    78     52
64   78    80     78

1 个答案:

答案 0 :(得分:2)

您可以使用ifelse()比较两个向量值和初始值之间的差,然后选择较低的值:

df <- data.frame(Y = c(58,60,56,64),
                 Y1 = c(65,61,52,78),
                 Y2 = c(59,61.4,78,80))

df$X <- with(df, ifelse(abs(Y1-Y) < abs(Y2-Y), Y1, Y2))

   Y Y1   Y2  X
1 58 65 59.0 59
2 60 61 61.4 61
3 56 52 78.0 52
4 64 78 80.0 78

编辑:正如@RuiBarradas指出的那样,应该对绝对值进行比较。我已经更改了ifelse()条件以解决此问题。