создать новую группу, содержащую одно значение из каждой из n других групп - PullRequest
0 голосов
/ 12 декабря 2018

Учитывая приведенные ниже примеры данных:

test_data <- tibble(
  FAMILY_MEMBER_TYPE = c(rep("Father", times = 2), rep("Mother", times = 2), 
                         rep("Daugther", times = 3), rep("Son", times = 3)),
  NAME = c("Fred", "Frank", "Mary", "Megan", "Diane", "Denise", "Daisy", 
           "Sam", "Scott", "Steve")) 

Как можно было бы создать новую переменную группировки FAMILY_NUMBER, которая показывает возможную комбинацию семейств, учитывая, что в семействе может быть только один FAMILY_MEMBER_TYPE.

Т.е. пример желаемого вывода (с 2 возможными семействами):

output_data <- tibble(
   FAMILY_NUMBER = c(rep("FAMILY 1", 4), rep("FAMILY 2", 4)),
   NAME = c("Fred", "Mary", "Diane", "Sam", "Fred", "Megan", "Diane","Sam"),
   FAMILY_MEMBER_TYPE = c(rep(c("Father", "Mother", "Daughter", "Son"), 2)))

    > output_data
    # A tibble: 8 x 3
      FAMILY_NUMBER NAME  FAMILY_MEMBER
      <chr>         <chr> <chr>        
    1 FAMILY 1      Fred  Father       
    2 FAMILY 1      Mary  Mother       
    3 FAMILY 1      Diane Daughter     
    4 FAMILY 1      Sam   Son          
    5 FAMILY 2      Fred  Father       
    6 FAMILY 2      Megan Mother       
    7 FAMILY 2      Diane Daughter     
    8 FAMILY 2      Sam   Son 

РЕДАКТИРОВАТЬ: я изменил test_data, чтобы содержать неравные числа FAMILY_MEMBER_TYPE, так как в практическомВ случае, если мне нужно применить это решение, группы содержат неодинаковое количество переменных.

1 Ответ

0 голосов
/ 12 декабря 2018

Если число членов равно и известно, вы можете просто добавить порядковые номера к каждому из них.

test_data <- tibble(
  FAMILY_MEMBER_TYPE = c(rep("Father", times = 3), rep("Mother", times = 3), 
                         rep("Daugther", times = 3), rep("Son", times = 3)),
  NAME = c("Fred", "Frank", "Felix", "Mary", "Megan", "Michelle", "Diane", 
           "Denise", "Daisy", "Sam", "Scott", "Steve")) 

test_data$family <- seq(1, 3)

arrange(test_data, family)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...