如何从R数据帧中分离出最小的数量级值



My Problem

我有以下(简化)数据框架df:

A    B    C
[1,]    2   -5   20
[2,]  -10   -1   10
[3,]   10  -10    0 

我只想分离出最小的值

[ 2, -1, 0 ]

我该怎么做呢?

What I've try

到目前为止,我只是用它来显示每行绝对的最小值:

MagMin <- vector()

for(i in 1:nrow(df)){ 
sub <- df[i,]
MagMin[i] <- min(abs(df[i,]))
}

得到[2, 1, 0],但显然,我已经失去了最小值方向的标志。

我在python中找到了一个很好的答案,但是我想不出如何在这里应用它!

apply(mat, 1, function(z) z[which.min(abs(z))])
# [1,] [2,] [3,] 
#    2   -1    0 

演练:

  • 当您想要最小幅度时,min(abs(val))将返回该值的正数,您知道…

    val <- c(-10L, -1L, 10L)
    min(abs(val))
    # [1] 1
    
  • 我们可以使用which.min(abs(val))来确定向量中哪个是最小幅度,它返回向量上的索引:

    which.min(abs(val))
    # [1] 2
    
  • 使用它,我们可以根据最小幅度提取特定值(pos或负值):

    val[which.min(abs(val))]
    # [1] -1
    
  • 为每一行重复操作,我们使用apply(mat, 1, ...)1MARGIN=1的,意思是"行",第三个参数(FUN=)是一个函数,它只接受一个参数,并对它做一些事情;在这种情况下,第一次调用它时,z实际上是mat[1,],其值为c(2, -5, 20);第二次,它实际上是mat[2,],值为c(-10, -1, 10);等。


数据
mat <- structure(list(A = c(2L, -10L, 10L), B = c(-5L, -1L, -10L), C = c(20L, 10L, 0L)), class = "data.frame", row.names = c("[1,]", "[2,]", "[3,]"))

最新更新