我想将具有变量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)
希望有人能够提出答案或指出我正确的方向。
非常感谢帮助。
答案 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
)输出以创建“天数”列。
:=