Перепись, домохозяйства, состоящие из пар (с детьми или без), родившихся в одном и том же месте (dplyr way) - PullRequest
2 голосов
/ 16 апреля 2019

Я работаю во французской переписи начала 20-го века.Я работаю по домашним хозяйствам.У каждого домохозяина есть house_chief (всегда на позиции 1).Когда домохозяин основан на паре, жена всегда находится на второй позиции.

id_houseold<- c(1, 1, 1, 1, 2, 2, 3, 4,4,4, 5, 5)
 members <- c("household_chief", "wife", "child", "child","household_chief", "wife", "household_chief", "household_chief", "wife", "child", "household_chief","child")
 birthplace<- c("Paris", "Paris", "Paris", "Paris", "Paris", "Bordeaux",   "Nantes", "Paris", "Paris", "Nantes", "Nantes,", "Nantes")
data <- data.frame(id_houseold, members, birthplace)

Я сделал последовательность позиций членов каждого домохозяйства:

library(dplyr)
data <- data %>%
group_by(id_houseold) %>% 
mutate(position_in_menage = 1:n())
data 

Вот мой результат:

id_houseold members         birthplace position_in_menage
     <dbl> <fct>           <fct>                   <int>
1           1 household_chief Paris                       1
2           1 wife            Paris                       2
3           1 child           Paris                       3
4           1 child           Paris                       4
5           2 household_chief Paris                       1
6           2 wife            Bordeaux                    2
7           3 household_chief Nantes                      1
8           4 household_chief Paris                       1
9           4 wife            Paris                       2
10          4 child           Nantes                      3
11          5 household_chief Nantes,                     1
12          5 child           Nantes                      2

Что я хочу kwowиспользуя пакет dplyr:

, какие домохозяйства состоят из пар (с детьми или без детей), родившихся в одном месте?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Вот еще один подход, использующий filter,

library(tidyverse)

data %>% 
 filter(members %in% c("household_chief", "wife")) %>% 
 group_by(id_houseold) %>% 
 filter(n_distinct(birthplace) == 1 & n() > 1)

что дает,

# A tibble: 4 x 3
# Groups:   id_houseold [2]
  id_houseold members         birthplace
        <dbl> <fct>           <fct>     
1           1 household_chief Paris     
2           1 wife            Paris     
3           4 household_chief Paris     
4           4 wife            Paris
1 голос
/ 16 апреля 2019

Вы можете проверить для каждого id_houseold, присутствуют ли всегда "household_chief" и "wife" и имеют ли они одинаковый уникальный birthplace, используя n_distinct.Если они имеют одно и то же значение birthplace, тогда значение n_distinct будет равно 1.

library(dplyr)

data %>%
  group_by(id_houseold) %>%
  summarise(is_couple = all(c("household_chief", "wife") %in% members) &
            n_distinct(birthplace[members %in% c("household_chief", "wife")]) == 1))

#  id_houseold is_couple
#        <dbl> <lgl>    
#1           1 TRUE     
#2           2 FALSE     
#3           3 FALSE    
#4           4 TRUE     
#5           5 FALSE  
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...