【发布时间】:2023-04-11 05:58:01
【问题描述】:
为半“双重职位”道歉。我觉得我应该能够破解这个,但我正在兜圈子。这与我之前很好回答的问题类似:
Within ID, check for matches/differences
test <- data.frame(
ID=c(rep(1,3),rep(2,4),rep(3,2)),
DOD = c(rep("2000-03-01",3), rep("2002-05-01",4), rep("2006-09-01",2)),
DOV = c("2000-03-05","2000-06-05","2000-09-05",
"2004-03-05","2004-06-05","2004-09-05","2005-01-05",
"2006-10-03","2007-02-05")
)
我想做的是标记第一次访问(如 DOV)距离诊断 (DOD) 不到 180 天的对象。我从 plyr 包中得到以下内容。
ddply(test, "ID", function(x) ifelse( (as.numeric(x$DOV[1]) - as.numeric(x$DOD[1])) < 180,1,0))
这给出了:
ID V1
1 A 1
2 B 0
3 C 1
我想要的是一个向量 1,1,1,0,0,0,0,1,1,所以我可以将它作为一列附加到数据框中。基本上这个 ddply 函数很好,它制作了一个“查找”表,我可以在其中查看哪些 ID 在诊断后 180 天内首次访问,然后我可以进行原始测试并通过并制作一个指标变量,但是我应该能够做到这一点,这是我认为的一步。
如果可能的话,我也想使用 base。我有一个带有“by”的方法,但它再次为每个 ID 提供了一个结果,并且也是一个列表。一直在尝试聚合,但得到诸如“必须是一个列表”之类的东西,然后是“它的长度不一样”,并使用输入的公式方法,我被难住了“cbind(DOV,DOD)〜ID”......
欣赏输入,渴望学习!
【问题讨论】:
标签: r