r - 映射非数字因子以在 R 中的两列之间选择更高的值

标签 r dplyr levels data-mapping

我有一个包含两列的数据框:PathGroupStage、ClinGroupStage。我想创建一个新列 OutputStage,它选择更高的阶段。

阶段的有效值:I、IA、IB、II、IIA、IIB、III、IIIA、IIIB、IIIC、IV、IVA、IVB、IVC、未知。

  • 如果两个阶段都有值,则使用最高的值,例如 IIIB > IIIA > III
  • 如果缺少一个而另一个有值(value),则使用有值(value)的一个
  • 如果两者均缺失或未知,则 .= 未知

如何通过比较两列中的非数字值来导出 OutputStage 变量?我想我需要考虑水平,但是我如何比较不同列之间的因素?

这是示例数据集:

   PathGroupStage       ClinGroupStage
1              II                 <NA>
2               I                   IA
3             IVB                  IVB
4            IIIA Unknown/Not Reported
5               I                  III
6              II                 <NA>
7            IIIA                  IIB
8              II                   II
9            <NA>                 <NA>
10           IIIB Unknown/Not Reported

 df <- structure(list(PathGroupStage = c("II", "I", "IVB", "IIIA", "I", 
    "II", "IIIA", "II", NA, "IIIB"), ClinGroupStage = c(NA, "IA", 
    "IVB", "Unknown/Not Reported", "III", NA, "IIB", "II", NA, "Unknown/Not Reported"
    )), row.names = c(NA, 10L), class = "data.frame")

最佳答案

一种选择可能是:

stages <- c("Unknown/Not Reported", "I", "IA", "IB", "II", "IIA", "IIB", "III", "IIIA", "IIIB", "IIIC" ,"IV", "IVA", "IVB", "IVC")

df %>%
    mutate(across(everything(), ~ factor(., levels = stages, ordered = TRUE)),
           OutputStage = pmax(PathGroupStage, ClinGroupStage, na.rm = TRUE))

   PathGroupStage       ClinGroupStage OutputStage
1              II                 <NA>          II
2               I                   IA          IA
3             IVB                  IVB         IVB
4            IIIA Unknown/Not Reported        IIIA
5               I                  III         III
6              II                 <NA>          II
7            IIIA                  IIB        IIIA
8              II                   II          II
9            <NA>                 <NA>        <NA>
10           IIIB Unknown/Not Reported        IIIB

关于r - 映射非数字因子以在 R 中的两列之间选择更高的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70099078/

相关文章:

r - 为 geom_smooth 中的组变量设置单独的调色板

r - 如何计算交叉表中行和列的百分比?

r - 在 dplyr::bind_cols 中使用点运算符

R累积时差

r - dplyr 变异 : Excluding observations similar to the current one

c++ - 打印一般树级别

r - 如何使用 R 中的子函数更改具有加号 (+) 的因子水平?

r - 将文件排序为与另一个文件具有相同的列顺序

r - 如何在满足特定均匀度的情况下生成一组随机生成的丰度?

r - 创建一个具有更多级别的因子,默认情况下在 R 中使用