从分组变量中获取日期和星期几

问题描述

想知道是否有人可以帮助我完成数据整理任务。

我试图在数据集中计算7天的时间段,并将每个分组标记为星期数(1-n)。

到目前为止,我最好的尝试是在数据集上重复一个1:7的序列,但这并没有考虑分组更改。我想要的输出将是这样的:

site    patient_id    date    time    nebs_day    days
01    R01002     2019-04-04       NA        0     1
01    R01002     2019-04-05 16:57:14        1     2
01    R01002     2019-04-06       NA        0     3
01    R01002     2019-04-07 18:19:49        1     4
01    R01002     2019-04-08       NA        0     5
01    R01002     2019-04-09 15:06:44        1     6
01    R01002     2019-04-10 15:36:47        1     7
01    R01002     2019-04-11       NA        0     1
01    R01002     2019-04-12 17:42:32        1     2
01    R01002     2019-04-13 20:24:46        1     3 
01    R01003     2018-09-06 17:58:41        1     1 # Changes group with patient_id
01    R01003     2018-09-07 00:00:05        3     2
01    R01003     2018-09-08 12:52:57        1     3
01    R01003     2018-09-09 00:31:59        4     4
01    R01003     2018-09-10 12:36:52        2     5
01    R01003     2018-09-11 09:39:30        2     6
01    R01003     2018-09-12 09:38:22        3     7

对于周数,我正尝试根据如下所示的天数获取输出

site    patient_id    date    time    nebs_day    days  week
01    R01002     2019-04-04       NA        0     1    34 #Increases by one for each period
01    R01002     2019-04-05 16:57:14        1     2    34
01    R01002     2019-04-06       NA        0     3    34
01    R01002     2019-04-07 18:19:49        1     4    34
01    R01002     2019-04-08       NA        0     5    34
01    R01002     2019-04-09 15:06:44        1     6    34
01    R01002     2019-04-10 15:36:47        1     7    34 
01    R01002     2019-04-11       NA        0     1    35 
01    R01002     2019-04-12 17:42:32        1     2    35
01    R01002     2019-04-13 20:24:46        1     3    35 #Not a full 7days,but mark as 1 week
01    R01003     2018-09-06 17:58:41        1     1    1  #Count resets with new patient_id
01    R01003     2018-09-07 00:00:05        3     2    1
01    R01003     2018-09-08 12:52:57        1     3    1
01    R01003     2018-09-09 00:31:59        4     4    1
01    R01003     2018-09-10 12:36:52        2     5    1
01    R01003     2018-09-11 09:39:30        2     6    1
01    R01003     2018-09-12 09:38:22        3     7    1

任何对此的帮助将不胜感激。在此之前,我曾尝试使用days()和weeks(),但这是区分数据集中7天周期的要求,因此使用lubridate不能完全准确。

以下是一些示例数据:

sample <- data.frame(
site = rep(1,each = 17),patient_id = c("R01002","R01002","R01003","R01003"),date = c("2019-04-04","2019-04-05","2019-04-06","2019-04-07","2019-04-08","2019-04-09","2019-04-10","2019-04-11","2019-04-12","2019-04-13","2018-09-06","2018-09-07","2018-09-08","2018-09-09","2018-09-10","2018-09-11","2018-09-12"),nebs_day = c(0,1,3,4,2,3))

Thanks!

解决方法

我们可以将'date'转换为Date类,并按'Patient_id'分组,用row_number创建'days'并从'date'中提取week >

library(dplyr)
library(lubridate)
sample %>% 
     mutate(date = as.Date(date)) %>%
     group_by(patient_id) %>% 
     mutate(days = (row_number()-1) %% 7 + 1,week = week(date))
,

我们可以使用rep对每个组中的行数重复值1:7。要获取星期数,我们可以使用format

library(dplyr)

sample %>%
  mutate(date = as.Date(date)) %>%
  group_by(site,patient_id) %>%
  mutate(days = rep(1:7,length.out = n()),week = format(date,'%V'))

#    site patient_id date       nebs_day  days week 
#   <dbl> <chr>      <date>        <dbl> <int> <chr>
# 1     1 R01002     2019-04-04        0     1 14   
# 2     1 R01002     2019-04-05        1     2 14   
# 3     1 R01002     2019-04-06        0     3 14   
# 4     1 R01002     2019-04-07        1     4 14   
# 5     1 R01002     2019-04-08        0     5 15   
# 6     1 R01002     2019-04-09        1     6 15   
# 7     1 R01002     2019-04-10        1     7 15   
# 8     1 R01002     2019-04-11        0     1 15   
# 9     1 R01002     2019-04-12        1     2 15   
#10     1 R01002     2019-04-13        1     3 15   
#11     1 R01003     2018-09-06        1     1 36   
#12     1 R01003     2018-09-07        3     2 36   
#13     1 R01003     2018-09-08        1     3 36   
#14     1 R01003     2018-09-09        4     4 36   
#15     1 R01003     2018-09-10        2     5 37   
#16     1 R01003     2018-09-11        2     6 37   
#17     1 R01003     2018-09-12        3     7 37   

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...