将数据从1,1,1编码为1,2,3

问题描述 投票:2回答:1

所以我有这个dataframe。在列[[potential_child下,我想重新编码值,以使最大的孩子== 1,第二个最老的== 2,第三个最老的== 3,依此类推。我具有这些孩子的年龄,但是我是挣扎着如何做到这一点。

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 =<)

r dataframe tidyverse data-wrangling
1个回答
1
投票
我们可以基于arrangehousehold_idage数据,并且对于每个household_id,将potential_child替换为0后,获得NA值的累积和。

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))

© www.soinside.com 2019 - 2024. All rights reserved.