如何解决在小标题中查找行列最小值和列索引
我有以下小标题:
> df <- tibble(
ID = LETTERS[1:4],a = c(1,5,9,8),b = c(5,8,2),c = c(5,4,5)
)
> df
# A tibble: 4 x 4
ID a b c
<chr> <dbl> <dbl> <dbl>
1 A 1 5 5
2 B 5 9 4
3 C 9 8 5
4 D 8 2 5
>
我想要的是获得列 a:c
的行列最小值以及该最小值的列索引。
输出表应如下所示:
# A tibble: 4 x 6
ID a b c Min Col_Index
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 1 5 5 1 1
2 B 5 9 4 4 3
3 C 9 8 5 5 3
4 D 8 2 5 2 2
我不想使用rowwise()
!
谢谢!
解决方法
您可以将 pmin
与 do.call
一起使用以获得行列最小值,并否定与 max.col
一起使用的值以获得最小值的列索引。
library(dplyr)
library(purrr)
df %>%
mutate(Min = do.call(pmin,select(.,a:c)),Col_Index = max.col(-select(.,a:c)))
# ID a b c Min Col_Index
# <chr> <dbl> <dbl> <dbl> <dbl> <int>
#1 A 1 5 5 1 1
#2 B 5 9 4 4 3
#3 C 9 8 5 5 3
#4 D 8 2 5 2 2
使用purrr
的{{1}}:
pmap_dbl
,
一种选择可能是:
df %>%
rowwise() %>%
mutate(min = min(c_across(a:c)),min_index = which.min(c_across(a:c)))
ID a b c min min_index
<chr> <dbl> <dbl> <dbl> <dbl> <int>
1 A 1 5 5 1 1
2 B 5 9 4 4 3
3 C 9 8 5 5 3
4 D 8 2 5 2 2
,
基础 R 解决方案:
setNames(cbind(df,t(apply(df[,vapply(df,is.numeric,logical(1))],1,function(row) {
cbind(min(row),which.min(row))}))),c(names(df),"min","col_index"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。