Функция кодирования / суммирования - PullRequest
0 голосов
/ 04 января 2019

Я создаю функцию, которая будет кодировать людей в зависимости от их семейного состава. Как видно из кода ниже, № 21 обозначает пару с одним или несколькими детьми в возрасте до 15 лет.

# 10    One adult without children
# 11    One adult with at least an own son or daughter aged less than 15
# 12    else: an own child aged 15 to 24 (1)
# 13    else: another child aged less than 15
# 20    One couple without children
# 21    One couple with at least:an own son or daughter aged less than 15
# 22    else: an own child aged 15 to 24 (1)
# 23    else: another child aged less than 15

Используя функции case_when () иween (), я помечаю наблюдения, как показано ниже:

V(x)$age.code <- case_when(V(x)$age <= 15 ~ "x1",                      
                     between(V(x)$age, 15, 18) ~ "x2",
                     between(V(x)$age, 18, 24) ~ "X3", 
                     V(x)$age > 24 ~ "X4")

Затем я создаю функцию подсчета взрослых / детей по домашним хозяйствам.

hhcomp <- function(x){
 if (sum(x == "X4", na.rm = T) == 1 | sum(x == "x3", na.rm = T) == 1)
 {y <- "10"}
 else if (sum(x == "X4", na.rm = T) | sum(x == "X3", na.rm = T) == 1 &  
                 sum(x  == "X1", na.rm = T) >= 1)
 {y <- "11"}
  else if ((sum(x == "X4", na.rm = T) | sum(x == "X3", na.rm = T) == 1) & 
                 sum(x == "X2", na.rm = T) >= 1 & sum(x == "X1") >= 1)
 {y <- "12"}
 else {y <- NA}
}

Как видно выше:

X1 = less than 15 
x2 = 15 to 18
X3 = 18 to 24 
x4 = greater than 24 

У меня проблемы с кодированием сумм в функции hhcomp, особенно для # 12 и # 13. Я не уверен, где поставить операторы амперсанда (&) и (|) и требуются ли скобки

РЕДАКТИРОВАТЬ:

ID FamID Age.Code 
1   A1     X1
2   A1     X3
3   A2     X4
4   A2     x4

df.2 <- df %>% group_by(FamID) %>% mutate(code = hhcomp(Age.Code)) %>% 
          ungroup()

Я хочу посчитать X-термины для каждого FamID и применить код к каждому ID в качестве новой переменной, используя mutate.

У меня проблемы с логическими операторами

...