создать базу данных на основе which.max () - PullRequest
1 голос
/ 02 марта 2020

У меня есть набор данных, например

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

большое спасибо заранее,

Ответы [ 2 ]

2 голосов
/ 02 марта 2020
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
1 голос
/ 02 марта 2020

Obe dplyr и tidyr возможность может быть:

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
...