【问题标题】:Create New Column With Consecutive Count Of First Series Based on ID Column根据 ID 列创建具有第一个系列连续计数的新列
【发布时间】:2025-04-01 01:50:02
【问题描述】:

我在医疗保健行业工作,我正在使用机器学习算法开发一个模型来预测患者何时不会出现在他们的预约中。我正在尝试创建一个新功能,该功能将是每个患者最近连续未出现的总和。我在 * 和其他资源上看了很多,但找不到我要找的东西。例如,如果患者没有显示她最近的两次约会,则新特征列的每一行及其 ID 都将用 2 填充。如果她没有出现 3 次,但出现在她最近的约会中,那么新的列将用 0 填充。

我尝试将 plyr 的 ddply 与 cumsum 一起使用,但它没有给我想要的结果。我用过:

ddply(a, .(ID), transform, ConsecutiveNoshows = cumsum(Noshow))

这是一个示例数据集(“1”表示未出现):

ID  Noshow
 1       1
 1       1
 1       0
 1       0
 1       1
 2       0
 2       1
 2       1
 3       1
 3       0
 3       1
 3       1
 3       1

这是我想要的结果:

ID  Noshow  ConsecutiveNoshows
 1       1                   2
 1       1                   2
 1       0                   2
 1       0                   2
 1       1                   2
 2       0                   0
 2       1                   0
 2       1                   0
 3       1                   1
 3       0                   1
 3       1                   1
 3       1                   1
 3       1                   1

如果有任何帮助,我将不胜感激。谢谢。

【问题讨论】:

    标签: r aggregate-functions feature-extraction feature-selection


    【解决方案1】:

    这个想法是sum() 为每个ID Noshow 的数量在0 出现之前。

    library(dplyr)
    df %>%
      group_by(ID) %>%
      mutate(ConsecutiveNoshows = sum(!cumsum(Noshow == 0) >= 1))
    

    这给出了:

    #Source: local data frame [13 x 3]
    #Groups: ID [3]
    #
    #      ID Noshow ConsecutiveNoshows
    #   <int>  <int>              <int>
    #1      1      1                  2
    #2      1      1                  2
    #3      1      0                  2
    #4      1      0                  2
    #5      1      1                  2
    #6      2      0                  0
    #7      2      1                  0
    #8      2      1                  0
    #9      3      1                  1
    #10     3      0                  1
    #11     3      1                  1
    #12     3      1                  1
    #13     3      1                  1
    

    【讨论】:

    • 史蒂文,我将您的解决方案应用到了我更大的数据集,它完全按预期工作。非常感谢你教会了我你用来寻找解决方案的思考过程。
    • @JamesMarquez 很高兴它有帮助:)
    最近更新 更多