在R中:如何从属于一个人的多行数据帧中提取特定(例如最后一个)值



我有一个数据框架,其中包含移植后患者随访的变量。

为了简单起见,变量的数量是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(

使用bytail

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

最新更新