Reputation: 2859
I have a data-set like
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
and I want to create a dataset base on the max value in that column, so the expected data frame should look like below
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
many thanks in advance,
Upvotes: 1
Views: 45
Reputation: 39858
Obe dplyr
and tidyr
possibility could be:
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
Upvotes: 1
Reputation: 18543
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
Upvotes: 2