【问题标题】:Calculate the minimum difference among the three column and give the corresponding value计算三列之间的最小差值并给出对应的值
【发布时间】:2016-07-11 22:25:25
【问题描述】:

假设我有如下数据,

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")

这给了我最接近的列。但是我想找到对应的值。

谁能帮我做这件事?

谢谢

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    从列 id 到最终解决方案,只差一步。您可以使用 Hadley Wickhams Advaned R:http://adv-r.had.co.nz/Subsetting.html 中所述的矩阵子集。使用您已经检测到的列构建子集矩阵,对于行,您可以只使用运行数字。

    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
    

    【讨论】:

      【解决方案2】:

      一个不是很漂亮的在线人:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 2021-06-03
        • 1970-01-01
        • 2016-10-30
        • 2021-06-01
        • 1970-01-01
        相关资源
        最近更新 更多