【问题标题】:Calculate days from start in R在R中计算从开始的天数
【发布时间】:2021-03-30 12:07:48
【问题描述】:

我正在寻找一种方法来计算参与者 (id) 在研究中花费的天数。

示例数据文件如下所示:

data <- data.frame(date = as.Date(c("2020-11-29", "2020-11-30", "2020-12-02", 
                                    "2020-12-04", "2020-12-05", "2020-12-08",
                                    "2020-11-22", "2020-11-21", "2020-11-24", 
                                    "2020-11-25", "2020-11-30", "2020-11-29",
                                    "2021-01-29", "2021-01-20", "2021-01-30", 
                                    "2021-02-01", "2021-02-04", "2021-02-04")),
                   id = rep(1:3, each = 6))

data <- dplyr::arrange(data, id, date)

data

         date id
1  2020-11-29  1
2  2020-11-30  1
3  2020-12-02  1
4  2020-12-04  1
5  2020-12-05  1
6  2020-12-08  1
7  2020-11-21  2
8  2020-11-22  2
9  2020-11-24  2
10 2020-11-25  2
11 2020-11-29  2
12 2020-11-30  2
13 2021-01-20  3
14 2021-01-29  3
15 2021-01-30  3
16 2021-02-01  3
17 2021-02-04  3
18 2021-02-04  3

我想要的是新列days_from_start,它将为每个id 占用第一天并将其设置为0。然后它将计算每个id 中每隔一行的天数。像这样的:

data$days_from_start <- c(0, 1, 3, 4, 5, 8,
                          0, 1, 3, 4, 8, 10, 
                          0, 9, 10, 11, 14, 14)

data

         date id days_from_start
1  2020-11-29  1               0
2  2020-11-30  1               1
3  2020-12-02  1               3
4  2020-12-04  1               4
5  2020-12-05  1               5
6  2020-12-08  1               8
7  2020-11-21  2               0
8  2020-11-22  2               1
9  2020-11-24  2               3
10 2020-11-25  2               4
11 2020-11-29  2               8
12 2020-11-30  2              10
13 2021-01-20  3               0
14 2021-01-29  3               9
15 2021-01-30  3              10
16 2021-02-01  3              11
17 2021-02-04  3              14
18 2021-02-04  3              14

有什么想法吗?

谢谢

【问题讨论】:

    标签: r date dplyr


    【解决方案1】:

    只需对数据进行分组,为每个id计算出最早的date,然后计算差异。

    data <- dplyr::arrange(data, id, date)
     data %>%
       group_by(id) %>% 
       mutate(
         start_date=min(date),
         days_from_start=as.numeric(date-start_date)
       ) %>% 
       ungroup() %>% 
       select(-start_date)
    # A tibble: 18 x 3
       date          id days_from_start
       <date>     <int>           <dbl>
     1 2020-11-29     1               0
     2 2020-11-30     1               1
     3 2020-12-02     1               3
     4 2020-12-04     1               5
     5 2020-12-05     1               6
     6 2020-12-08     1               9
     7 2020-11-21     2               0
     8 2020-11-22     2               1
     9 2020-11-24     2               3
    10 2020-11-25     2               4
    11 2020-11-29     2               8
    12 2020-11-30     2               9
    13 2021-01-20     3               0
    14 2021-01-29     3               9
    15 2021-01-30     3              10
    16 2021-02-01     3              12
    17 2021-02-04     3              15
    18 2021-02-04     3              15
    

    【讨论】:

    • 我相信您的解决方案应该被编辑。 blazej 正在查找参与者 (id) 在研究中花费的天数。根据提供的数据,ID 1 在研究中花费 6 天而不是 9 天,否则必须编辑问题
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多