如何找到数据帧每一行的最小值索引?
How to find the indexes of minimum value for each row of a dataframe?
假设我有一个像
这样的数据框df
[,1] [,2] [,3] [,4]
x 1 2 7 1
y 1 5 1 5
我想为 df
的每一行找到最小值的索引。我的预期结果是
YES NO NO NO YES
YES NO YES NO No
我试过了
x <- c(1, 2, 7, 1)
y <- c(1, 5, 1, 5)
df <- rbind(x, y)
apply(df, 1, which.min)
但它不起作用。能否请您详细说明如何操作?
试试
#Code
X==apply(X,1, min)
输出:
X==apply(X,1, min)
V2 V3 V4 V5
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE
使用了一些数据:
#Data
X <- structure(c(1L, 1L, 2L, 5L, 7L, 1L, 1L, 5L), .Dim = c(2L, 4L), .Dimnames = list(
c("x", "y"), c("V2", "V3", "V4", "V5")))
我们可以用apply
遍历行(MARGIN =1
),比较行中的元素和
行的min
t(apply(df, 1, function(x) x == min(x)))
-输出
# [,1] [,2] [,3] [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或使用 matrixStats
中的 rowMins
使其紧凑
library(matrixStats)
df == rowMins(df)
# [,1] [,2] [,3] [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或者如果我们想坚持使用 base R
并使用矢量化选项,那么 pmin
是另一种方式(在将 matrix
转换为 data.frame
之后)
df == do.call(pmin, as.data.frame(df))
使用 Reduce
+ pmin
的基本 R 选项(最好使用 do.call
(而不是 Reduce
),因为 在更多列出现时显示涉及,从速度的角度来看,因为 Reduce
会慢得多。)
Reduce(pmin, data.frame(df)) == df
给予
[,1] [,2] [,3] [,4]
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE
假设我有一个像
这样的数据框df
[,1] [,2] [,3] [,4]
x 1 2 7 1
y 1 5 1 5
我想为 df
的每一行找到最小值的索引。我的预期结果是
YES NO NO NO YES
YES NO YES NO No
我试过了
x <- c(1, 2, 7, 1)
y <- c(1, 5, 1, 5)
df <- rbind(x, y)
apply(df, 1, which.min)
但它不起作用。能否请您详细说明如何操作?
试试
#Code
X==apply(X,1, min)
输出:
X==apply(X,1, min)
V2 V3 V4 V5
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE
使用了一些数据:
#Data
X <- structure(c(1L, 1L, 2L, 5L, 7L, 1L, 1L, 5L), .Dim = c(2L, 4L), .Dimnames = list(
c("x", "y"), c("V2", "V3", "V4", "V5")))
我们可以用apply
遍历行(MARGIN =1
),比较行中的元素和
min
t(apply(df, 1, function(x) x == min(x)))
-输出
# [,1] [,2] [,3] [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或使用 matrixStats
rowMins
使其紧凑
library(matrixStats)
df == rowMins(df)
# [,1] [,2] [,3] [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或者如果我们想坚持使用 base R
并使用矢量化选项,那么 pmin
是另一种方式(在将 matrix
转换为 data.frame
之后)
df == do.call(pmin, as.data.frame(df))
使用 Reduce
+ pmin
的基本 R 选项(最好使用 do.call
(而不是 Reduce
),因为 Reduce
会慢得多。)
Reduce(pmin, data.frame(df)) == df
给予
[,1] [,2] [,3] [,4]
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE