r - 计算 ID 为 "break variable"的特定日期的天数

标签 r date count days

我想使用变量 Id 作为“中断变量”来计算从特定日期开始的天数,并将结果作为新列。我希望结果类似于数据框 RESULT 中的结果。

我正在收集有关患者进展的数据 (Variable_x),并且我想使用“天数”变量作为混合模型中的时间变量。

以下是变量:

Id <- c(1,1,1,1,2,2,2,5,5,5,5,5)
Date <- as.Date (c("2015-01-01", "2015-01-10", "2015-01-15","2015-01-25","2013-02-01", "2013-03-20", "2013-04-03","2014-05-06","2014-06-07","2014-06-08","2014-08-09","2014-10-10"))
Variable_x <- c("70","NA","55", "30", "70", "60", "NA", "80", "60", "70", "50","20")
Days <- c(0,9,14,24,0,47,61,0,32,33,95,157)

这是我拥有的数据:

DATA <- data.frame(Id, Date, Variable_x)

这是我想要的数据:

RESULT <- data.frame(Id, Date, Days, Variable_x)

希望有人能给出答案或为我指出正确的方向。

非常感谢您的帮助。

最佳答案

使用data.table的选项。我们将 'data.frame' 转换为 'data.table' (setDT(DATA)),按 'Id' 分组,我们得到 'Date' 和 lag 的“日期”(shift 默认情况下为 type=lag),获取 cumsum 并赋值 (:=) 输出以创建“天”列。

library(data.table)#v1.9.6+
setDT(DATA)[, Days:=cumsum(as.numeric(Date-shift(Date, fill=Date[1L]))), Id]
DATA
#    Id       Date Variable_x Days
# 1:  1 2015-01-01         70    0
# 2:  1 2015-01-10         NA    9
# 3:  1 2015-01-15         55   14
# 4:  1 2015-01-25         30   24
# 5:  2 2013-02-01         70    0
# 6:  2 2013-03-20         60   47
# 7:  2 2013-04-03         NA   61
# 8:  5 2014-05-06         80    0
# 9:  5 2014-06-07         60   32
#10:  5 2014-06-08         70   33
#11:  5 2014-08-09         50   95
#12:  5 2014-10-10         20  157

关于r - 计算 ID 为 "break variable"的特定日期的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32795543/

相关文章:

r - 如何在 ggpairs 函数中定义刻面轴限制

r - 分解()的时间太少

r - 在 plotly (R) 中按另一列对条形图进行分组

javascript - for循环中的数组与第二个for循环数组javascript合并

sqlite - 计算后代记录数量的有效方法

R:格式化 xtable 中的数字

java - Java中的日期时间解析

使用 MySQL 显示表状态的 php 日期格式

Java - 如何在另一个列表中查找列表中的项目数

xml - 带条件的 xpath 计数