我有一个数据帧df1。我想从此数据框中找到第二个最小值的索引。使用which.min函数,我可以获取最小值的行索引,但是有没有办法获取第二最小值的索引?
> df1
structure(list(x = c(1, 2, 3, 4, 3), y = c(2, 3, 2, 4, 6), z = c(1,
4, 2, 3, 11)), row.names = c(NA, -5L), class = c("tbl_df", "tbl",
"data.frame"))
>df1
x y z
1 2 1
2 3 4
3 2 2
4 4 3
3 6 11
这是我想要的输出。例如,在x中,第2行中的值2是第二个最小值。谢谢。
>df2
x 2
y 2
z 3
您可以使用编写类似以下的函数factor
:
which_min <- function(x, pos) {
sapply(x, function(y) {
which(as.numeric(factor(y, sort(unique(y)))) == pos)[1]
})
}
which_min(df1, 2)
# x y z
# 2 2 3
用其他数据进行测试:
df2 <- df1
df2$new <- c(1, 1, 1, 2, 3)
which_min(df2, 2)
# x y z new
# 2 2 3 4
sort
可以使用order
以下方法代替:
sapply(df1, function(x) order(unique(x))[2])
# x y z
# 2 2 3
或者,您可以在中使用index.return
参数sort
:
sapply(df1, function(x) sort(unique(x), index.return = TRUE)$ix[2])
# x y z
# 2 2 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句