Запись данных с 1,1,1 до 1,2,3 - PullRequest
2 голосов
/ 06 апреля 2020

Итак, у меня есть датафрейм . Под столбцом потенциал_членда я хочу перекодировать значения так, чтобы самый старший ребенок == 1, второй самый старый == 2, третий самый старый == 3 и т.д. c. У меня есть возраст детей, но я не могу понять, как именно это сделать.

DHS1 <- structure(list(person_id = c(1, 2, 1, 2, 3, 4, 1, 7, 1, 2), household_id = c(1,1, 6, 6, 6, 6, 7, 63342, 63344, 63344), year = c(2018, 2018,2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018), month = c(1,1, 1, 1, 1, 1, 1, 12, 12, 12), sex = c(2, 1, 1, 2, 1, 2, 1, 1,1, 2), age = c(28, 28, 44, 37, 10, 10, 60, 65, 55, 55), potential_mom = c(1,NA, NA, 1, NA, NA, NA, NA, NA, 1), potential_child = c(NA, NA,NA, NA, 1, 1, NA, NA, NA, NA), momloc = c(0, 0, 0, 0, 2, 2, 0,0, 0, 0), num_child = c(0, 0, 0, 0, 1, 1, 0, 0, 0, 0)), row.names = c(NA,-10L), class = c("tbl_df", "tbl", "data.frame"))

Я пытаюсь обдумать это (заранее извиняюсь за этот уродливый бродяга):

mutate(potential_child2 = if potential_child == 1 & age =<)

1 Ответ

1 голос
/ 06 апреля 2020

Мы можем arrange данные на основе household_id и age и для каждого household_id получить совокупную сумму potential_child значения после замены NA на 0.

library(dplyr)

DHS1 %>%
  arrange(household_id, age) %>%
  group_by(household_id) %>%
  #Or if you also want to do it for every person
  #group_by(person_id, household_id) %>%
  mutate(potential_child = cumsum(replace(potential_child, 
                                   is.na(potential_child), 0)), 
         potential_child = replace(potential_child, potential_child == 0, NA))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...