Как получить подмножество данного фрейма данных в 3 группы, содержащие по 5 строк в R - PullRequest
0 голосов
/ 18 октября 2018

У меня есть R-фрейм данных, содержащий 45 строк и 5 столбцов.Он имеет 3 группы, обозначенные как «Группа 1», «Группа 2», «Группа 3».Каждая группа содержит один и тот же набор из 15 наблюдений (Примечание: это итоговая комбинация между 15 Location_ID и атрибутами и group_ID).

Location_ID Group_ID    Population  Orders  num_schools
1   Group1  718866  4163    613
2   Group1  905600  4673    790
3   Group1  319276  4892    214
4   Group1  378980  3916    535
5   Group1  598938  4395    655
6   Group1  677865  4753    460
7   Group1  716822  3234    894
8   Group1  525005  2040    309
9   Group1  528621  2865    796
10  Group1  577955  4856    613
11  Group1  604970  2199    704
12  Group1  521017  2510    939
13  Group1  613552  2050    551
14  Group1  126465  3933    746
15  Group1  197608  2121    674
1   Group2  718866  4163    613
2   Group2  905600  4673    790
3   Group2  319276  4892    214
4   Group2  378980  3916    535
5   Group2  598938  4395    655
6   Group2  677865  4753    460
7   Group2  716822  3234    894
8   Group2  525005  2040    309
9   Group2  528621  2865    796
10  Group2  577955  4856    613
11  Group2  604970  2199    704
12  Group2  521017  2510    939
13  Group2  613552  2050    551
14  Group2  126465  3933    746
15  Group2  197608  2121    674
1   Group3  718866  4163    613
2   Group3  905600  4673    790
3   Group3  319276  4892    214
4   Group3  378980  3916    535
5   Group3  598938  4395    655
6   Group3  677865  4753    460
7   Group3  716822  3234    894
8   Group3  525005  2040    309
9   Group3  528621  2865    796
10  Group3  577955  4856    613
11  Group3  604970  2199    704
12  Group3  521017  2510    939
13  Group3  613552  2050    551
14  Group3  126465  3933    746
15  Group3  197608  2121    674

Мне нужно получить все возможные комбинации строк из этого кадра данных в подмножествоиз 15 строк, так что каждая группа содержит 5 уникальных строк внутри групп.

1 Ответ

0 голосов
/ 18 октября 2018

Предполагая, что ваш набор данных 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...