【问题标题】:R: Returning the largest two values' column names in a data frameR:返回数据框中最大的两个值的列名
【发布时间】:2021-11-04 13:20:32
【问题描述】:

有几篇关于返回数据框最大值的列名的帖子。 (喜欢这篇文章:For each row return the column name of the largest value)

但是,我的问题比这复杂一点,我想知道如果我想用 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 

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

【问题讨论】:

    标签: r dataframe dplyr data-cleaning


    【解决方案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"
    

    或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
    

    【讨论】:

      【解决方案2】:
      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"
      

      【讨论】:

        猜你喜欢
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 1970-01-01
        相关资源
        最近更新 更多