r - R:基于每个患者的进入日期的顺序排名(1、1、1、2、2、2等)?
问题描述
我正在尝试创建一个列,根据每个人的进入日期对他们进行排名,但由于每个人的进入日期都是独一无二的,因此具有挑战性。
这是一个代表:
df <- data.frame(
unique_id = c(1, 1, 1, 2, 2, 3, 3, 3),
date_of_entry = c("3-12-2001", "3-13-2001", "3-14-2001", "4-1-2001", "4-2-2001", "3-28-2001", "3-29-2001", "3-30-2001"))
我想要的是:
df_desired <- data.frame(
unique_id = c(1, 1, 1, 2, 2, 3, 3, 3),
date_of_entry = c("3-12-2001", "3-13-2001", "3-14-2001", "4-1-2001", "4-2-2001", "3-28-2001", "3-29-2001", "3-30-2001"),
day_at_facility = c(1, 2, 3, 1, 2, 1, 2, 3))
基本上,我想在设施中订购天数,但我需要根据每个唯一 ID 重新启动它。如果不清楚,请告诉我。
解决方案
(这是一个骗局,还没有找到,但在此期间......)
碱基R
ave(rep(1L,nrow(df)), df$unique_id, FUN = seq_along)
# [1] 1 2 3 1 2 1 2 3
所以因此
df$day_at_facility <- ave(rep(1L,nrow(df)), df$unique_id, FUN = seq_along)
dplyr
library(dplyr)
df %>%
group_by(unique_id) %>%
mutate(day_at_facility = row_number())
# # A tibble: 8 x 3
# # Groups: unique_id [3]
# unique_id date_of_entry day_at_facility
# <dbl> <chr> <int>
# 1 1 3-12-2001 1
# 2 1 3-13-2001 2
# 3 1 3-14-2001 3
# 4 2 4-1-2001 1
# 5 2 4-2-2001 2
# 6 3 3-28-2001 1
# 7 3 3-29-2001 2
# 8 3 3-30-2001 3
推荐阅读
- python - 为什么使用 Boto3 的 S3 客户端 download_file 会抛出任务超时错误?
- r - 将带 ** 的显着性水平括号添加到分组箱线图中;ggplot
- c++ - Qt:可视化大型二维数组的最有效方法是什么?
- javascript - 如何将 JSON 对象数组中的属性添加到 Javascript 中的 Set
- python - OpenPyXl 将 2 个工作簿合并为第三个工作簿
- mongodb - 更改获取 MongoDB 的日期格式
- css - 如何让 SASS 忽略数学运算?
- postgresql - postgres 中的模式和触发器
- javascript - expect(received).toEqual(expected) // 深度相等 - 当响应具有三元条件时抛出此错误
- python - 如何在不同的行上打印每个字母两次?