1

有几篇关于返回数据框最大值的列名的帖子。(像这篇文章:对于每一行返回最大值的列名

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

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

这将返回如下内容:

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

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

1  V3  V2 
2  V1  V3 
3  V2  V3 

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

4

2 回答 2

1

使用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"

dapplycollapse

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
于 2021-09-07T17:34:04.880 回答
0
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"
于 2021-09-07T16:49:08.807 回答