【问题标题】:How to create an order/ranking for majors declared by each student如何为每个学生申报的专业创建顺序/排名
【发布时间】:2023-01-19 03:07:40
【问题描述】:

我有一个数据集,其中包含学生 ID 和专业名称以及学期。主要的复杂因素是,如果学生回到以前的专业,我希望它算作另一个专业

StudID   Major       Term
12345    History     202101
12345    History     202102
12345    Management  202201
12345    History     202202

期望的结果

StudID   Major       Term    MajorNumber
12345    History     202101  1
12345    History     202102  1
12345    Management  202201  2
12345    History     202202  3

我唯一尝试过的是为每个专业提取最早的学期,然后根据每个专业的最早学期在 StudentID 中进行排名,但这意味着最终的“历史”变成了 1 而不是 3

【问题讨论】:

    标签: r


    【解决方案1】:

    data.table::rleid 函数就是这样做的。

    有了数据表,

    library(data.table)
    your_dt = as.data.table(your_data)
    your_dt[, MajorNumber := rleid(Major), by = .(StudID)]
    your_dt
    #    StudID      Major   Term MajorNumber
    # 1:  12345    History 202101           1
    # 2:  12345    History 202102           1
    # 3:  12345 Management 202201           2
    # 4:  12345    History 202202           3
    

    或者dplyr

    library(dplyr)
    your_data %>%
      group_by(StudID) %>%
      mutate(MajorNumber = data.table::rleid(Major)) %>%
      ungroup()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多