Предполагая, что ваш набор данных df
, это решение сохраняет только 15 distinct
строк, а затем присваивает им значение Group_ID
на основе их номера строки:
library(dplyr)
df %>%
select(-Group_ID) %>%
distinct() %>%
mutate(Group_ID = case_when(row_number() <= 5 ~ "Group1",
between(row_number(), 6, 10) ~ "Group2",
row_number() >= 11 ~ "Group3"))
# Location_ID Population Orders num_schools Group_ID
# 1 1 718866 4163 613 Group1
# 2 2 905600 4673 790 Group1
# 3 3 319276 4892 214 Group1
# 4 4 378980 3916 535 Group1
# 5 5 598938 4395 655 Group1
# 6 6 677865 4753 460 Group2
# 7 7 716822 3234 894 Group2
# 8 8 525005 2040 309 Group2
# 9 9 528621 2865 796 Group2
# 10 10 577955 4856 613 Group2
# 11 11 604970 2199 704 Group3
# 12 12 521017 2510 939 Group3
# 13 13 613552 2050 551 Group3
# 14 14 126465 3933 746 Group3
# 15 15 197608 2121 674 Group3
Если вы хотите случайныйGroup_ID
назначение, которое вы можете добавить sample_frac(1)
, чтобы перетасовать строки перед созданием столбца Group_ID
:
df %>%
select(-Group_ID) %>%
distinct() %>%
sample_frac(1) %>%
mutate(Group_ID = case_when(row_number() <= 5 ~ "Group1",
between(row_number(), 6, 10) ~ "Group2",
row_number() >= 11 ~ "Group3"))