Изменение значений в векторе после лечения в R - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть следующая проблема, для которой я не могу найти хороший способ ее исправить.Скажем, у меня есть набор данных панели, состоящий из субъектов, которые проходили лечение (в разное время).

Воспроизводимый пример:

df <- data.frame(subject = rep(c("A", "B"), each = 6),
                 period = rep(c(2006:2011), 2),
                 treatment = c(0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0))

Теперь я хочу создать индикаторную переменную 'post', равную единицеза все периоды после обработки, такие, что данные выглядят так:

    subject period treatment post
 1        A   2006         0    0
 2        A   2007         1    1
 3        A   2008         0    1
 4        A   2009         0    1
 5        A   2010         0    1
 6        A   2011         0    1
 7        B   2006         0    0
 8        B   2007         0    0
 9        B   2008         1    1
 10       B   2009         0    1
 11       B   2010         0    1
 12       B   2011         0    1

Я пытался решить эту проблему с помощью лагов и т. д., но код становится неоправданно запутанным.Что бы элегантно решить этот вопрос?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

С 'Tidyverse':

df %>% 
   group_by(subject) %>% 
   arrange(subject,period) %>% 
   mutate(post= cumsum(treatment))
# A tibble: 12 x 4
# Groups:   subject [2]
   subject period treatment  post
   <fct>    <int>     <dbl> <dbl>
 1 A         2006         0     0
 2 A         2007         1     1
 3 A         2008         0     1
 4 A         2009         0     1
 5 A         2010         0     1
 6 A         2011         0     1
 7 B         2006         0     0
 8 B         2007         0     0
 9 B         2008         1     1
10 B         2009         0     1
11 B         2010         0     1
12 B         2011         0     1
0 голосов
/ 22 декабря 2018

Вы можете использовать ave().

transform(df, post = ave(treatment == 1, subject, FUN = cumsum))
#    subject period treatment post
# 1        A   2006         0    0
# 2        A   2007         1    1
# 3        A   2008         0    1
# 4        A   2009         0    1
# 5        A   2010         0    1
# 6        A   2011         0    1
# 7        B   2006         0    0
# 8        B   2007         0    0
# 9        B   2008         1    1
# 10       B   2009         0    1
# 11       B   2010         0    1
# 12       B   2011         0    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...