如何从 R 数据帧中分离出最小的量级值
How isolate just the smallest magnitude values from an R data frame
我的问题
我有以下(简化的)数据框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]
,但显然,我已经失去了最小值走向的标志。
我在 中找到了一个很好的问题答案,但我想不出如何在此处应用它!
apply(mat, 1, function(z) z[which.min(abs(z))])
# [1,] [2,] [3,]
# 2 -1 0
Walk-through:
当你想要最小-幅度时,min(abs(val))
会return正的,你知道......
val <- c(-10L, -1L, 10L)
min(abs(val))
# [1] 1
我们可以用which.min(abs(val))
来确定向量中的哪个是min-magnitude, return 是矢量的索引:
which.min(abs(val))
# [1] 2
使用它,我们可以根据 min-magnitude:
提取特定值(pos 或 neg)
val[which.min(abs(val))]
# [1] -1
对每一行重复操作,我们使用apply(mat, 1, ...)
。 1
用于 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,]"))
我的问题
我有以下(简化的)数据框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]
,但显然,我已经失去了最小值走向的标志。
我在
apply(mat, 1, function(z) z[which.min(abs(z))])
# [1,] [2,] [3,]
# 2 -1 0
Walk-through:
当你想要最小-幅度时,
min(abs(val))
会return正的,你知道......val <- c(-10L, -1L, 10L) min(abs(val)) # [1] 1
我们可以用
which.min(abs(val))
来确定向量中的哪个是min-magnitude, return 是矢量的索引:which.min(abs(val)) # [1] 2
使用它,我们可以根据 min-magnitude:
提取特定值(pos 或 neg)val[which.min(abs(val))] # [1] -1
对每一行重复操作,我们使用
apply(mat, 1, ...)
。1
用于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,]"))