r - 日期范围为 R 中的 1 或 0 系列

标签 r date date-range

我有按患者列出开始和结束填充日期的药房 claim 数据。为了以后的计算,我想记录一个真 (1) 或假 (0) 日记,记录每个患者是否记录了某一天的日期。
使用下面的示例数据,我试图分析 1/1/2013-1/10/2013 定义的十天期间的观察结果。
我玩过 ?seqdate数据

Patient_ID  Start_Date  End_Date  
a           1/1/2013    1/3/2013  
b           1/3/2013    1/8/2013  
c           1/1/2013    1/10/2013  
d           1/7/2013    1/9/2013
a           1/8/2013    1/9/2013
所需的输出(长格式)
            a   b   c   d  
1/1/2013    1   0   1   0  
1/2/2013    1   0   1   0  
1/3/2013    1   1   1   0  
1/4/2013    0   1   1   0  
1/5/2013    0   1   1   0  
1/6/2013    0   1   1   0  
1/7/2013    0   1   1   1  
1/8/2013    1   1   1   1  
1/9/2013    1   0   1   1  
1/10/2013   0   0   1   0  

最佳答案

尝试

library(data.table)
res <- setDT(df1)[, seq(as.Date(Start_Date, '%m/%d/%Y'),
    as.Date(End_Date, '%m/%d/%Y'), by='day'), by=list(Patient_ID, 
       1:nrow(df1))]
table(res[,c(3,1), with=FALSE])

或仅使用 base R
 lst <- Map(seq, as.Date(df1$Start_Date, '%m/%d/%Y'), 
        as.Date(df1$End_Date, '%m/%d/%Y'), by='day') 
 lst <- lapply(lst, format, '%m/%d/%Y')
 table(unlist(lst), rep(df1$Patient_ID,lengths(lst)))
 #            a b c d
 # 01/01/2013 1 0 1 0
 # 01/02/2013 1 0 1 0
 # 01/03/2013 1 1 1 0
 # 01/04/2013 0 1 1 0
 # 01/05/2013 0 1 1 0
 # 01/06/2013 0 1 1 0
 # 01/07/2013 0 1 1 1
 # 01/08/2013 1 1 1 1
 # 01/09/2013 1 0 1 1
 # 01/10/2013 0 0 1 0

数据
 df1 <- structure(list(Patient_ID = c("a", "b", "c", "d", "a"), 
 Start_Date = c("1/1/2013", 
 "1/3/2013", "1/1/2013", "1/7/2013", "1/8/2013"), End_Date =
 c("1/3/2013",  
 "1/8/2013", "1/10/2013", "1/9/2013", "1/9/2013")), 
 .Names = c("Patient_ID", 
 "Start_Date", "End_Date"), class = "data.frame",
  row.names = c(NA, -5L))

关于r - 日期范围为 R 中的 1 或 0 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718380/

相关文章:

r - 从命令行安装 R 包

javascript - 在javascript中将时间添加到Date对象

excel - 如何在VBA中查找日期之间的差异

Python日期字符串到日期对象

java - 将日期范围添加到 lucene 搜索查询

单击 R Shiny 中的按钮后将输入字段重置为 null

r - 排除 R 中 df 中顶部和底部 1% 的数据

r - 达到阈值时 dplyr 重置计数器

sql - Postgresql 在月份范围之间进行选择

java - 使用 DatePicker 选择多个日期