R 查找每行最大值的列索引
我是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
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"))