【问题标题】:How do you align time-date data across multiple subjects in R您如何在 R 中跨多个主题对齐时间日期数据
【发布时间】:2019-02-24 03:04:10
【问题描述】:

我正在尝试将来自多个主题的数据缩放到相同的时间尺度上。当前数据文件包含每个主题 3 个月的数据,但每个主题的每个事件的时间戳反映不同的开始-结束日期。

df$ID <- c(1, 1, 1, 1, 1, 2, 2, 2, 2)
df$Time <- c(2:34:00, 2:55:13, 5:23:23, 7:23:04, 9:18:18, 3:22:12, 4:23:02; 5:23:22, 9:30:02)
df$Date <- c(7/13/16, 7/13/16, 7/13/16, 7/14/16, 7/14/16, 1/02/14, 1/02/14, 1/03/14, 1/05/14)
df$widgets <-(4, 6, 9, 18, 3, 3, 7, 9, 12)

我想将 df 更改为有一个共同的时间刻度,这样我就有一个日期索引,可以让我保持如下相同的格式:

df$ScaleDate <- c(1,1,1,2,2,1,1,2,4) #time scale is within-ID

【问题讨论】:

    标签: r date time-series multivariate-partition


    【解决方案1】:

    首先,作为参考,这是我使用的数据:

    df <- data.frame(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2),
                 Time = c("2:34:00", "2:55:13", "5:23:23", "7:23:04", "9:18:18", "3:22:12", "4:23:02", "5:23:22", "9:30:02"),
                 Date = c("7/13/16", "7/13/16", "7/13/16", "7/14/16", "7/14/16", "1/02/14", "1/02/14", "1/03/14", "1/05/14"),
                 widgets = c(4, 6, 9, 18, 3, 3, 7, 9, 12))
    

    我们可以将使用过的dplyr 语法(不是强制性的,但看起来非常清晰和简单)与lubridate 函数一起使用,并非常简单地执行此操作:

    library(dplyr)
    library(lubridate)
    df %>%
      mutate(Date = mdy(Date)) %>%
      group_by(ID) %>%
      mutate(ScaleDate = as.numeric((Date - Date[1]) + 1))
    

    mdy 将值转换为 Date 对象。然后我们可以对它们进行操作。如果日期相同,则结果为“0 天”。因此,我们将其加 1 并将其转换为数字以获取索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多