Как создать «familyID» для строк с общими «customerID» и «spouseID»? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать «домашний идентификатор» для всех пар, которые появляются в большем фрейме данных (около 250 000 строк). У каждого человека есть значения «customerID» и «spouseID». Если customerID состоит в браке, идентификатор их супруга отображается в столбце spouseID. Если они не состоят в браке, поле spouseID будет пустым. Каждый член супружеской пары будет отображаться в отдельной строке, в результате чего потребуется общий «идентификатор домашнего хозяйства», которым обладает пара.

Как лучше всего добавить уникальный домашний идентификатор, который дублируется для пар? Небольшой пример исходных данных:

> df <- data.frame(prospectID=as.numeric(c(1:10)),
+                  spouseID=as.numeric(c(2,1,"",5,4,"","","",10,9)))
> df
   prospectID spouseID
1           1        2
2           2        1
3           3       NA
4           4        5
5           5        4
6           6       NA
7           7       NA
8           8       NA
9           9       10
10         10        9

Простой пример того, что я пытаюсь сделать, выглядит следующим образом:

   prospectID spouseID householdID
1           1        2           1
2           2        1           1
3           3       NA           2
4           4        5           3
5           5        4           3
6           6       NA           4
7           7       NA           5
8           8       NA           6
9           9       10           7
10         10        9           7

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Я бы сделал это так, чтобы создать дополнительную строковую переменную, которая является суммой-произведением двух идентификаторов потенциального клиента и супруга. Для одного клиента это будет Prospect_ID-0, например, 201-0. Для первой пары это будет 251-15150. Для каждой пары это значение будет уникальным, но любая пара получит одно и то же значение. Затем вы можете просто назначить поле идентификатора домохозяйства для суммы-продукта.

1 голос
/ 08 мая 2020

Мы можем использовать pmin / pmax для сортировки двух столбцов и создания новой переменной ID на основе этих двух столбцов.

library(dplyr)

df %>%
  mutate(col1 = pmin(prospectID, spouseID), 
        col2 = pmax(prospectID, spouseID)) %>%
  mutate(household_ID = group_indices(., col1, col2))

Или другой вариант:

df %>%
  mutate(grp = paste(pmin(prospectID, spouseID), pmax(prospectID, spouseID)), 
         household_ID = match(grp, unique(grp)))

#   prospectID spouseID  grp household_ID
#1           1        2  1 2            1
#2           2        1  1 2            1
#3           3        0  0 3            2
#4           4        5  4 5            3
#5           5        4  4 5            3
#6           6        0  0 6            4
#7           7        0  0 7            5
#8           8        0  0 8            6
#9           9       10 9 10            7
#10         10        9 9 10            7

Когда вы читаете данные в R, замените пустые значения на 0 или любое другое число для pmin и pmax работать.

df[df == ''] <- 0
df <- type.convert(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...