расчеты условного лага с использованием R - PullRequest
0 голосов
/ 26 октября 2018

Вот мои игрушечные данные и хочу вычислить diff_var4.

df <- tibble::tribble(
  ~var1, ~var2, ~var3, ~var4, ~diff_var4,
     1L,    1L,    1L,    2L,         NA,
     1L,    1L,    1L,    2L,         NA,
     1L,    2L,    1L,    2L,         0L,
     1L,    2L,    1L,    2L,         0L,
     1L,    4L,    1L,    2L,         0L,
     1L,    5L,    1L,    2L,         0L,
     1L,    6L,    2L,    8L,         6L,
     1L,    6L,    2L,    8L,         6L,
     2L,    4L,    1L,    5L,         NA,
     2L,    5L,    1L,    5L,         0L,
     2L,    5L,    1L,    5L,         0L,
     2L,    6L,    2L,    8L,         3L,
     2L,    6L,    2L,    8L,         3L)

вводятся переменные от var1 до var4, и мне нужно вычислить diff_var4 так, чтобы

условие 1 : для каждого var1, если var3 равно 1, а var2 равно min var2, тогда diff_var4 равен var4 - предыдущее (var4) для количества наблюдений, для которых var2 остается неизменным.

условие 2 : для каждого var1, если var3 изменяется, то diff_var4 равно var4- предыдущий (var4) для числа наблюдений, для которых var2 остается тем же.

Я начал с

df %>% group_by(var1) %>% 
  mutate(diff_var4 = var4-lag(var4))

, но не могу получить нужный diff_var4 с NA во 2-й строке6 в 8-м ряду и 3 в последнем!

Помогите, пожалуйста, рассчитать diff_var4, желательно с решением по тидиверсу.

1 Ответ

0 голосов
/ 26 октября 2018

Решение проблемы решено следующим образом:

df %>% group_by(var1) %>% 
  mutate(diff_var4 = var4-lag(var4)) %>%
  group_by(var1, var2) %>% 
  mutate(diff_var4 = max(diff_var4))

Все еще открыты для других решений, если они у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...