我有一个数据框架,其中包含移植后患者随访的变量。
为了简单起见,变量的数量是2:1(患者身份,2(从移植到随访事件的天数。
每一行都是随访。数据框中的每个患者可能有多个随访。每个患者的随访次数各不相同。移植后随访的天数也各不相同。
我想提取每个患者最后一次随访的天数,并将其写在患者每次随访观察的单独一栏中。
在真实的数据集中,患者数量约为15000人。我试图从嵌套的数据帧中提取值,但这对我来说是不可能的
示例:
patient_ID <- c("A", "A", "A", "A", "B", "B", "C", "C", "C")
days_tx_followup <- c(0, 5, 10, 15, 2, 4, 1, 2, 3)
df <- data.frame(patient_ID, days_tx_followup)
patient_ID days_tx_followup
1 A 0
2 A 5
3 A 10
4 A 15
5 B 2
6 B 4
7 C 1
8 C 2
9 C 3
我想要什么:
patient_ID days_tx_followup last_followup
1 A 0 15
2 A 5 15
3 A 10 15
4 A 15 15
5 B 2 4
6 B 4 4
7 C 1 3
8 C 2 3
9 C 3 3
谢天谢地,dplyr
有一个名为last
的函数可以做到这一点。
df %>%
group_by(patient_ID) %>%
mutate(
last_followup = last(days_tx_followup)
)
#> # A tibble: 9 × 3
#> # Groups: patient_ID [3]
#> patient_ID days_tx_followup last_followup
#> <chr> <dbl> <dbl>
#> 1 A 0 15
#> 2 A 5 15
#> 3 A 10 15
#> 4 A 15 15
#> 5 B 2 4
#> 6 B 4 4
#> 7 C 1 3
#> 8 C 2 3
#> 9 C 3 3
创建于2022-08-23由reprex包(v2.0.1(
使用by
和tail
。
by(df, df$patient_ID, (x) cbind(x, last_followup=tail(x$days_tx_followup, 1))) |> unsplit(df$patient_ID)
# patient_ID days_tx_followup last_followup
# 1 A 0 15
# 2 A 5 15
# 3 A 10 15
# 4 A 15 15
# 5 B 2 4
# 6 B 4 4
# 7 C 1 3
# 8 C 2 3
# 9 C 3 3