计算特定日期的天数,ID为“中断变量”

时间:2015-09-26 09:18:15

标签: 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)

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

非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

您可能正在寻找diff以及R的众多分组功能之一。

这是&#34; dplyr&#34;的一个例子:

library(dplyr)
DATA %>%
  group_by(Id) %>%
  mutate(Days = cumsum(c(0, diff(Date))))
# Source: local data frame [12 x 4]
# Groups: Id [3]
# 
#       Id       Date Variable_x  Days
#    (dbl)     (date)     (fctr) (dbl)
# 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

答案 1 :(得分:2)

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

:=