我有一个包含ID、日期、生命天数和药物变量的数据集。每个ID都有多个观察值,表明某种药物的不同给药方式。我想找到彼此相隔365天内服用的独特药物。数据帧示例如下:
ID date dayoflife meds
1 2003-11-24 16361 lasiks
1 2003-11-24 16361 vigab
1 2004-01-09 16407 lacos
1 2013-11-25 20015 pheno
1 2013-11-26 20016 vigab
1 2013-11-26 20016 lasiks
2 2008-06-05 24133 pheno
2 2008-04-07 24074 vigab
3 2014-11-25 8458 pheno
3 2014-12-22 8485 pheno我希望结果是:
ID N
1 3
2 2
3 1这表明个体1在365天内最多服用3种不同类型的药物。我不确定是否最好使用days of life或date来获得这个预期的outcome.Any帮助
发布于 2019-07-31 22:36:51
一种选择是将'date‘转换为Date类,按'ID’分组,获取'date‘的absdiff错误和列的lag,检查它是否大于365,使用cumsum创建分组索引,获取summarise中'meds’的不同元素的数量
library(dplyr)
df1 %>%
mutate(date = as.Date(date)) %>%
group_by(ID) %>%
mutate(diffd = abs(as.numeric(difftime(date, lag(date, default = first(date)),
units = 'days')))) %>%
group_by(grp = cumsum(diffd > 365), add = TRUE) %>%
summarise(N = n_distinct(meds)) %>%
group_by(ID) %>%
summarise(N = max(N))
# A tibble: 3 x 2
# ID N
# <int> <int>
#1 1 2
#2 2 2
#3 3 1发布于 2019-07-31 22:37:51
您可以尝试:
library(dplyr)
df %>%
group_by(ID) %>%
mutate(date = as.Date(date),
lag_date = abs(date - lag(date)) <= 365,
lead_date = abs(date - lead(date)) <= 365) %>%
mutate_at(vars(lag_date, lead_date), ~ ifelse(., ., NA)) %>%
filter(coalesce(lag_date, lead_date)) %>%
summarise(N = n_distinct(meds))输出:
# A tibble: 3 x 2
ID N
<int> <int>
1 1 2
2 2 2
3 3 1https://stackoverflow.com/questions/57293181
复制相似问题