【问题标题】:Get column name of the nearest or matching value in a column获取列中最近或匹配值的列名
【发布时间】:2021-12-31 17:25:50
【问题描述】:

head(mtcars)

                  mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

我想要两个新列。 near_wt 的值与 wt 列相同或接近。

我得到了这个使用

mtcars$near_wt <- mtcars[, -col][cbind(1:nrow(mtcars),
                                     max.col(-abs(mtcars[, col] - mtcars[, -col])))]

这行得通。接下来我需要的是“near_wt”的每个值所来自的列名。

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    col 是 6 吗?如果是这样,您可以尝试这种方式。为方便起见,我将x 定义为

    x <- cbind(1:nrow(mtcars),max.col(-abs(mtcars[, col] - mtcars[, -col])))
    

    那么,

    mtcars$near_wt <- mtcars[, -6][x]
    mtcars$near_wt_name <- names(mtcars[-6])[x[,2]]
    
    head(mtcars)
                       mpg cyl disp  hp drat    wt  qsec vs am gear carb near_wt near_wt_name
    Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4    3.90         drat
    Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4    3.90         drat
    Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1    1.00           am
    Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1    3.08         drat
    Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2    3.15         drat
    Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1    3.00         gear
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多