我們可以做max.col
j1 <- max.col(-df1[-1], "first")
res <- transform(df1, min_val = df1[-1][cbind(1:nrow(df1), j1)],
col_name = names(df1)[-1][i1])
res
# STOP_ID STP1 STP2 STP3 STP4 STP5 STP6 min_val col_name
#1 DEP1 10 518 497 131 16 131 10 STP1
#2 DEP2 510 22 32 452 510 452 22 STP2
#3 DEP3 487 27 45 439 487 430 27 STP2
#4 DEP4 132 466 445 32 132 62 32 STP4
#5 DEP5 43 518 487 131 55 483 43 STP1
#6 DEP6 132 466 445 32 132 25 25 STP6
這個使用矢量選項
或者使用data.table
library(data.table)
setDT(df1)[melt(setDT(df1), id.var = "STOP_ID", variable.name = "col_name",
value.name = "min_val")[, .SD[which.min(min_val)], STOP_ID]
, on = "STOP_ID"]
# STOP_ID STP1 STP2 STP3 STP4 STP5 STP6 col_name min_val
#1: DEP1 10 518 497 131 16 131 STP1 10
#2: DEP2 510 22 32 452 510 452 STP2 22
#3: DEP3 487 27 45 439 487 430 STP2 27
#4: DEP4 132 466 445 32 132 62 STP4 32
#5: DEP5 43 518 487 131 55 483 STP1 43
#6: DEP6 132 466 445 32 132 25 STP6 25
如果我們只需要 'STOP_ID', 'MIN_VAL' 和 'COL_NAME'
melt(setDT(df1), id.var = "STOP_ID", variable.name = "col_name",
value.name = "min_val")[, .SD[which.min(min_val)], STOP_ID]
# STOP_ID col_name min_val
#1: DEP1 STP1 10
#2: DEP2 STP2 22
#3: DEP3 STP2 27
#4: DEP4 STP4 32
#5: DEP5 STP1 43
#6: DEP6 STP6 25
看看'which.min()' –
我得到從給定的行 – Keerthy
但我想rowname即DEP1相應的列名即STP1然後最小值最小值,最小值10 – Keerthy