Вот один из способов, используя tidyverse
методы.В основном это говорит о том, что для каждого значения (map_int
) в group
возьмите sample
из групп, которые не являются текущими.
library(tidyverse)
df <- structure(list(name = c("Kanye West", "Chris Evans", "Robert Jr", "Bruce Wayne", "Peter Parker", "Steven Strange", "Danny rand", "Daniel Fisher", "Rob Son", "Son Bob", "Chun Li", "Ching Do", "Ping Pong", "Michael Jackson", "Rich Brian", "Ryan Gosling", "Nathan Nguyen", "Justin Bieber"), group = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -18L))
df %>%
mutate(
to_judge = map_int(
.x = group,
.f = ~ sample(
x = unique(group)[unique(group) != .x],
size = 1
)
)
)
#> # A tibble: 18 x 3
#> name group to_judge
#> <chr> <int> <int>
#> 1 Kanye West 1 4
#> 2 Chris Evans 1 2
#> 3 Robert Jr 1 3
#> 4 Bruce Wayne 2 1
#> 5 Peter Parker 2 3
#> 6 Steven Strange 2 3
#> 7 Danny rand 2 4
#> 8 Daniel Fisher 2 1
#> 9 Rob Son 3 1
#> 10 Son Bob 3 2
#> 11 Chun Li 3 4
#> 12 Ching Do 3 4
#> 13 Ping Pong 3 4
#> 14 Michael Jackson 4 2
#> 15 Rich Brian 4 3
#> 16 Ryan Gosling 4 1
#> 17 Nathan Nguyen 4 2
#> 18 Justin Bieber 4 1
Создано в 2018-09-20 Представить пакет (v0.2.0).