【问题标题】:Creating observation dummy variable from repeated dates从重复日期创建观察虚拟变量
【发布时间】: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 %&gt;% group_by(id) %&gt;% arrange(date) %&gt;% mutate(reldate=date - date[1])

标签: r dplyr


【解决方案1】:

您可以使用dense_rank 完成此操作,并且只能按ID 分组

data.have %>% 
    group_by(id) %>% 
    mutate(obs=dense_rank(date))

【讨论】:

  • 不知道dense_rank - 这对我来说非常有用。谢谢!
  • 如果这已经解决了您的问题,请将其标记为正确答案,以便对其他人有用 - stackoverflow.com/help/someone-answers
【解决方案2】:

稍微有点作弊的解决方案是按 id 分组,然后将日期转换为因子并返回数字:

data.have %>%
  group_by(id) %>% 
  mutate(obs = as.numeric(as.factor(date)))

【讨论】:

  • 是的,但要确保因子水平是有序的,要么通过对 data.have 进行排序,要么(更好)通过在 as.factor 中指定因子水平。
【解决方案3】:

出于非技术性原因,我会采取另一种方法:我会介绍一个相对日期,即自第一次观察以来的天数:

data.have %>% group_by(id) %>% arrange(date) %>% mutate(reldate=date - date[1])

这有几个原因,但最重要的一个是,根据我的经验,此类临床数据迟早需要一个相对日期来进行分析,因此最好尽早生成。

其实这个就是可能是你想要的值。

data.want <- data.have %>% group_by(id) %>% 
             arrange(date) %>% 
             mutate(reldate=date - date[1]) %>% 
             mutate(times=as.numeric(reldate + 1))

当然,假设每天进行测量。如果没有,您可以通过将相关日期转换为因子并将其作为数值向量来创建时间变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多