Мы можем сделать это в tidyverse
с pivot_longer/pivot_wider
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -Name) %>%
group_by(Name) %>%
mutate(value = value[order(-value)]) %>%
pivot_wider(names_from = name, values_from = value)
# A tibble: 3 x 4
# Groups: Name [3]
# Name Out1 Out2 Out3
# <fct> <int> <int> <int>
#1 Dave 3 3 2
#2 Pete 4 3 3
#3 John 2 NA NA
Или другой вариант - pmap
library(purrr)
df %>%
select(-Name) %>%
pmap(~ c(...) %>%
sort.int(decreasing = TRUE, na.last = TRUE) %>%
set_names(names(df)[-1]) %>%
as.list) %>%
tibble(Name = df$Name, Out = .) %>%
unnest_wider(Out)
# A tibble: 3 x 4
# Name Out1 Out2 Out3
# <fct> <int> <int> <int>
#1 Dave 3 3 2
#2 Pete 4 3 3
#3 John 2 NA NA
data
df <- structure(list(Name = structure(c(1L, 3L, 2L), .Label = c("Dave",
"John", "Pete"), class = "factor"), Out1 = c(2L, 3L, 2L), Out2 = c(3L,
3L, NA), Out3 = c(3L, 4L, NA)), class = "data.frame", row.names = c(NA,
3L))