我的問題
我有以下(簡化的)資料框df:
A B C
[1,] 2 -5 20
[2,] -10 -1 10
[3,] 10 -10 0
我只想隔離最小幅度的值:
[ 2, -1, 0 ]
我該怎么做?
我試過的
到目前為止,我剛剛得到它來告訴我每行的最小絕對值是多少:
MagMin <- vector()
for(i in 1:nrow(df)){
sub <- df[i,]
MagMin[i] <- min(abs(df[i,]))
}
這給了我[2, 1, 0],但很明顯,我已經失去了最小值的標志。
我在python中找到了這個問題的一個很好的答案,但我想不出如何在這里應用它!
uj5u.com熱心網友回復:
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使用它,我們可以根據 min-magnitude 提取特定值(pos 或 neg):
val[which.min(abs(val))] # [1] -1要對每一行重復操作,我們使用
apply(mat, 1, ...).1is for表示“MARGIN=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,]"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466671.html
上一篇:根據多個其他列查找正負bin限制
