基于ID列创建具有第一系列连续计数的新列

时间:2016-07-21 17:19:15

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

我在医疗保健行业工作,我正在使用机器学习算法来开发一个模型来预测患者何时不会出现他们的约会。我正在尝试创建一个新功能,它将成为每位患者最近连续缺席的总和。我在stackoverflow和其他资源上看了很多,但找不到我正在寻找的东西。例如,如果患者没有显示她过去两次最近的约会,那么新功能列的每一行及其ID都将填入2。如果她没有出现过三次,而是出现在她最近的约会中,那么新专栏将填入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

我将非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

sum()出现之前,ID的{​​{1}}个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