R 查找每行最大值的列索引

R 查找每行最大值的列索引,r,dataframe,max,R,Dataframe,Max,我是R编程新手,我有以下数据帧: A B C D E 1 3 0 4 5 0 2 0 0 5 1 0 3 2 1 2 0 3 我希望得到一个包含每行n个最大值索引的新数据框,例如:如果我希望每行n=3中3个最大值的列索引,我希望我的新数据框如下: F G H 1 1 3 4 2 1 3 4 3 1 3 5 因此,在这个数据帧的第一行中包含了原始数据帧中第1行的3个最大值的列索引。等等 我最初的想法是用which.max编写一个循环,但这似乎太长且无效。有谁有更好的主意吗?我们可以使用a

我是R编程新手,我有以下数据帧:

 A B C D E
1 3 0 4 5 0
2 0 0 5 1 0
3 2 1 2 0 3
我希望得到一个包含每行n个最大值索引的新数据框,例如:如果我希望每行n=3中3个最大值的列索引,我希望我的新数据框如下:

  F G H
1 1 3 4
2 1 3 4
3 1 3 5
因此,在这个数据帧的第一行中包含了原始数据帧中第1行的3个最大值的列索引。等等

我最初的想法是用which.max编写一个循环,但这似乎太长且无效。有谁有更好的主意吗?

我们可以使用apply

或者使用tidyverse

数据
谢谢你的快速回复!它起作用了!我看到apply、Lappy、mapply等被大量使用。它在实际领域似乎非常有用。如何轻松地学习这些函数?
t(apply(df1, 1, function(x) sort(head(seq_along(x)[order(-x)], 3))))
#   [,1] [,2] [,3]
#1    1    3    4
#2    1    3    4
#3    1    3    5
library(dplyr)
library(tidyr)
df1 %>%
   mutate(rn = row_number()) %>% 
   pivot_longer(cols = -rn) %>% 
   group_by(rn) %>% 
   mutate(ind = row_number()) %>% 
   arrange(rn, desc(value)) %>% 
   slice(n = 1:3)  %>% 
   select(-name, -value) %>% 
   arrange(rn, ind) %>%
   mutate(nm1 = c("F", "G", "H")) %>% 
   ungroup %>% 
   pivot_wider(names_from = nm1, values_from = ind)
df1 <- structure(list(A = c(3L, 0L, 2L), B = c(0L, 0L, 1L), C = c(4L, 
5L, 2L), D = c(5L, 1L, 0L), E = c(0L, 0L, 3L)), class = "data.frame",
row.names = c("1", 
"2", "3"))