【发布时间】:2019-11-22 00:26:30
【问题描述】:
我正在处理大型时间序列数据集。我有多个人(id)在很多天(日期)内按小时(小时)进行分析。然而,并非所有个体都在同一日期被观察到。我想创建一个新变量(obs),从 1:n 开始列出每个人的日期,以便同一天的每个小时检测都得到相同的数字。
我认为我可以通过使用 group_by(id, date) 和 mutate 来轻松地在 dplyr 中完成此操作,以计算每个 id 日期的长度,但这只是复制了我不想要的“小时”变量。
# what i have
id <- rep(c("id1", "id2"), each = 6)
date <- as.Date(rep(c("2018-3-13", "2018-3-14", "2018-4-11", "2018-4-12"), each = 3))
hour <- rep(1:3, 4)
data.have <- data.frame(id, date, hour)
# attempt 1 - just replicates 'hour' which I don't want
data.have %>%
group_by(id, date) %>%
arrange(date) %>%
mutate(obs = 1:length(date))
# what i want
obs <- rep(1:2, each =3, times = 2)
data.want <- data.frame(id, date, hour, obs)
´´´
【问题讨论】:
-
作为有临床数据经验的人,我强烈建议您引入一个相对观察日期变量,即从第 0 天开始的天数。不仅仅是因为你现在的问题。如果你这样做了,你的任务将是微不足道的。
data.have %>% group_by(id) %>% arrange(date) %>% mutate(reldate=date - date[1])