从分组变量中获取日数和周数
Get day and week numbers from grouped variables
想知道是否有人可以帮助我完成数据整理任务。
我正在尝试计算数据集中的 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", "R01002", "R01002", "R01002", "R01002",
"R01002", "R01002", "R01002", "R01002", "R01003", "R01003", "R01003",
"R01003", "R01003", "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,0,1,0,1,1,0,1,1,1,3,1,4,2,2,3))
Thanks!
我们可以将 'date' 转换为 Date
class,按 'patient_id' 分组,用 row_number
创建 'days' 并提取week
来自 'date'
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
想知道是否有人可以帮助我完成数据整理任务。
我正在尝试计算数据集中的 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", "R01002", "R01002", "R01002", "R01002",
"R01002", "R01002", "R01002", "R01002", "R01003", "R01003", "R01003",
"R01003", "R01003", "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,0,1,0,1,1,0,1,1,1,3,1,4,2,2,3))
Thanks!
我们可以将 'date' 转换为 Date
class,按 'patient_id' 分组,用 row_number
创建 'days' 并提取week
来自 'date'
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