我有以下数据集:
householdnumber begindate enddate typh id.male id.female
001999 2000-01 2012-10 2 q1 q2
001999 2012-10 2017-12 4 q1 q2
101999 2005-01 2012-11 4 q3 q4
101999 2012-11 2012-12 2 q3 q4每个家庭由两个人(身份为男性和身份为女性)和一个唯一的家庭编号组成。请注意,每个家庭编号在这里表示两次,因为家庭类型在特定日期发生变化(将其视为儿童是家庭的一部分,并且在特定日期之后不再是家庭的一部分,反之亦然)。
我的目标是使用R将此数据重写为每月数据。更准确地说,我正在寻找的格式如下
householdnumber date typh id.male id.female
001999 2000-01 2 q1 q2
001999 2000-02 2 q1 q2
....
001999 2012-10 4 q1 q2有谁知道怎么做吗?我只是看不出重塑或轴心命令如何能够帮助我做到这一点。我已经提前感谢你的帮助了。
发布于 2019-11-15 21:41:48
使用tidyverse包的一种可能性是包含两个步骤:
my_fun <- function(ymon1,ymon2){ dates <- as.Date(paste0(c(ymon1,ymon2),"-01"),format = "%Y-%m-%d") seq.Date(from = dates1,to = dates2,by = "month") %>% format("%Y-%m") %>% tibble(date = .) }
要尝试此函数,只需键入类似mfun("2000-01", "2001-05").
purrr::map2的内容,即可逐行应用此函数并取消嵌套结果:library(tidyverse) mydata %>% mutate(date = map2(begin_date,end_date,my_fun)) %>% unnest() %>% select(householdnumber,date,typh,id.male,id.female)家庭号码日期类型id.male id.female 1 001999 2000-01 2 q1 q1 2 001999 2000-02 2 q1 q1 3 001999 2000-03 2 q1 q1 4 001999 2000-04 2 q1 q1 ... .......
使用的数据:
mydata <- data.frame(householdnumber = c("001999","001999"),
begin_date = c("2000-01", "2012-10"),
end_date = c("2012-10", "2017-12"),
typh = c(2L, 4L),
id.male = c("q1", "q2"),
id.female = c("q1", "q2"),
stringsAsFactors = F)https://stackoverflow.com/questions/58877797
复制相似问题