1

Я работаю в сфере здравоохранения, и я использую алгоритмы машинного обучения, чтобы разработать модель для прогнозирования, когда пациенты не появятся для своих встреч. Я пытаюсь создать новую функцию, которая станет суммой последних последовательных не-шоу каждого пациента. Я много оглядывался на stackoverflow и другие ресурсы, но не могу найти то, что я ищу. Например, если пациент не показал свои последние два последних назначения, каждый столбец новой функции с ее идентификатором будет заполнен 2-мя. Если она не показала три раза, но показала свое последнее назначение, то новая колонка будет заполнена цифрой 0.Создайте новый столбец с последовательным подсчетом первой серии на основе столбца ID

Я пробовал использовать 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 

Я буду будьте очень благодарны за любую помощь. Спасибо.

ответ

0

Идея состоит в том, чтобы 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 
+1

Стивен, я применил свое решение для моих гораздо больших наборов данных, и она работала именно так, как задумано. Большое спасибо за то, что вы научили меня мыслительному процессу, который вы использовали для поиска решения. –

+0

@JamesMarquez Рад, что это помогло :) –

 Смежные вопросы

  • Нет связанных вопросов^_^