【问题标题】:make a dataframe base on the which.max()根据 which.max() 创建一个数据框
【发布时间】:2020-06-14 18:18:41
【问题描述】:

我有一个类似的数据集

title <- c('Title.1','Title.2','Title.3')
year.15 <- c( 17,20,11)
year.16 <- c( 19,16,13)
year.17 <- c( 13,12,0)
year.18 <- c( 12,12,0)

df <- data.frame(title, year.15,year.16,year.17,year.18)
df

我想根据该列中的最大值创建一个数据集,因此预期的数据框应如下所示

year.15  Title.2  20
year.16  Title.1  19
year.17  Title.1  13
year.18  Title.1  12
year.18  Title.1  12

非常感谢,

【问题讨论】:

    标签: r dplyr tidyverse tidyr data-manipulation


    【解决方案1】:

    Obe dplyrtidyr 可能是:

    df %>%
     pivot_longer(-title) %>%
     group_by(name) %>%
     top_n(1, wt = value)
    
      title   name    value
      <fct>   <chr>   <dbl>
    1 Title.1 year.16    19
    2 Title.1 year.17    13
    3 Title.1 year.18    12
    4 Title.2 year.15    20
    5 Title.2 year.18    12
    

    【讨论】:

      【解决方案2】:
      library(tidyr)
      
      df %>%
         pivot_longer(cols=-1) %>%
         group_by(name) %>%
         filter(value==max(value)) %>%
         arrange(name, title) %>%
         select(name, title, value)
      # A tibble: 5 x 3
      # Groups:   name [4]
        name    title   value
        <chr>   <fct>   <dbl>
      1 year.15 Title.2    20
      2 year.16 Title.1    19
      3 year.17 Title.1    13
      4 year.18 Title.1    12
      5 year.18 Title.2    12
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 2022-01-18
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多