R:返回数据框中最大的两个值的列名

R: Returning the largest two values' column names in a data frame

关于return数据框最大值的列名有几个post。 (像这样post:For each row return the column name of the largest value

但是,我的问题比这个复杂一点,我想知道如果我想return最大的两个(或三个,甚至十个)的列名,我应该使用什么代码R的数据?为了更清楚,您可以使用此示例代码:

DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))

这将 return 类似于:

  V1 V2 V3
1  2  7  9
2  8  3  6
3  1  5  4

我想获取最大的两列的列名,所以在这种情况下,它应该是这样的:

1  V3  V2 
2  V1  V3 
3  V2  V3 

非常感谢您的提前帮助! :)

DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
DF
#>   V1 V2 V3
#> 1  2  7  9
#> 2  8  3  6
#> 3  1  5  4

largest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[1]))]
secondlargest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[2]))]

cbind(largest, secondlargest)
#>      largest secondlargest
#> [1,] "V3"    "V2"         
#> [2,] "V1"    "V3"         
#> [3,] "V2"    "V3"

使用pmap

library(purrr)
pmap(DF, ~ {tmp <- c(...); head(names(tmp)[order(-tmp)], 2)})

-输出

[[1]]
[1] "V3" "V2"

[[2]]
[1] "V1" "V3"

[[3]]
[1] "V2" "V3"

dapply 来自 collapse

library(collapse)
slt(dapply(DF, MARGIN = 1, FUN = function(x) colnames(DF)[order(-x)]), 1:2)
  V1 V2
1 V3 V2
2 V1 V3
3 V2 V3