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