根据R中的表替换数据框中的值

时间:2017-03-15 20:02:47

标签: r

数据框:

 set.seed(90)
 df <- data.frame(id = 1:10, values = round(rnorm(10),1))
    id values
 1   1    0.1
 2   2   -0.2
 3   3   -0.9
 4   4   -0.7
 5   5    0.7
 6   6    0.4
 7   7    1.0
 8   8    0.9
 9   9   -0.6
 10 10    2.4

表:

 table <- data.frame(values = c(-2.0001,1.0023,0.0005,1.0002,2.00009), final_values = round(rnorm(5),2))

    values final_values
 1 -2.00010        -0.81
 2  1.00230        -0.08
 3  0.00050         0.87
 4  1.00020         1.66
 5  2.00009        -0.24

我需要根据表中值的最接近匹配来替换数据框中的值。

最终输出:

    id final_values
 1   1    0.87
 2   2    0.87
 3   3   -0.08
 4   4   -0.08
 5   5    1.66
 6   6    0.87
 7   7    1.66
 8   8    1.66
 9   9   -0.08
 10 10   -0.24

使用基础R执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

这是一种方法,您可以将结果覆盖回df

sapply(df$values, function(x) table$final_values[which.min(abs(x - table$values))])
[1]  0.87  0.87 -0.08 -0.08  1.66  0.87  1.66  1.66 -0.08 -0.24