首页 > 解决方案 > 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

解决方案


(这是一个骗局,还没有找到,但在此期间......)

碱基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

推荐阅读