微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据不同日期变量的观测值的存在或缺失生成新的因子变量

如何解决根据不同日期变量的观测值的存在或缺失生成新的因子变量

我有以下数据

R 代码

df <- data.frame(idnum = c(1001,1002,1003,1004),date1 = c(2003-03-19,2003-03-19,2003-03-19),date2 = c(2004-03-24,NA,2004-03-25,2004-03-26),date3 = c(2005-05-11,2005-05-12,NA))

并且想做类似下面我在Stata中所做的事情

Stata 代码

gen xvisit=1 if date1 !=. & date2 !=. & date3!=.
replace xvisit=2 if date1 !=. & date2 !=. & date3 ==. 
replace xvisit=3 if date1 !=. & date2 ==. & date3 !=.
replace xvisit=4 if date1 !=. & date2 ==. & date3 ==.
label define xvisit 1 "All" 2 "Baseline & 2nd" 3 "Baseline & 3rd" 4 "Baseline only"
label values xvisit xvisit

但我就是无法在 R 中正确使用。 我的目标是得到类似的东西

Stata Output

在此处输入图片描述

enter image description here

描述

解决方法

您可以使用 within 执行此操作。在 R 中,我们开始用 NA 初始化 xvisit 列。要按行查找所有日期都缺失的地方,我们可以有效地使用否定 rowSums 检查的 is.na - 当它是 3 时,我们得到了它。其他行应该是不言自明的。最后,我们创建一个 factor,其中 levels= 对应于数值,labels= 对应于级别。

您可能还需要考虑预先使用 as.Date 将字符日期转换为日期格式。

df[c("date1","date2","date3")] <- lapply(df[c("date1","date3")],as.Date)

df <- within(df,{
  xvisit <- NA
  xvisit[rowSums(!is.na(df[c("date1","date3")])) == 3] <- 1
  xvisit[is.na(df[["date3"]])] <- 2
  xvisit[is.na(df[["date2"]])] <- 3
  xvisit[is.na(df[["date1"]])] <- 4
  xvisit <- factor(xvisit,levels=1:4,labels=c("All","Baseline & 2nd","Baseline & 3rd","Baseline only"))
})
df
#   idnum      date1      date2      date3         xvisit
# 1  1001 2003-03-19 2004-03-24 2005-05-11            All
# 2  1002 2003-03-19       <NA> 2005-05-12 Baseline & 3rd
# 3  1003 2003-03-19 2004-03-25 2005-05-12            All
# 4  1004 2003-03-19 2004-03-26       <NA> Baseline & 2nd

数据:

df <- structure(list(idnum = c(1001,1002,1003,1004),date1 = c("2003-03-19","2003-03-19","2003-03-19"),date2 = c("2004-03-24",NA,"2004-03-25","2004-03-26"),date3 = c("2005-05-11","2005-05-12",NA)),class = "data.frame",row.names = c(NA,-4L
))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。