Создайте переменную, которая условно принимает определенное значение, пока не будет выполнено другое условие - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть набор данных панели с данными о конфликтах, для которых я хочу определить постконфликтные годы.

Итак, я сам создал переменную, которая кодирует переход от конфликта к миру с помощью «3». Всякий раз, когда начинаются значения для новой страны, я кодировал эту же переменную с помощью NA. S

Теперь я хочу создать новую двоичную переменную, которая идентифицирует постконфликтные годы с 1 и конфликтными годами и никогда не конфликтует с 0. Для этого мне придется присваивать каждый год после 3 в переходном периоде. переменная с 1 до тех пор, пока в том же столбце нет NA. Следующим образом:

Country       Year   transition    post-conflict
Afghanistan   1994   0  0
Afghanistan   1995   0  0
Afghanistan   1996   3  1
Afghanistan   1997   2  1
Afghanistan   1998   2  1
Albania       1994   NA 0
Albania       1994   2  0

Как я могу пойти по этому поводу?

1 Ответ

0 голосов
/ 04 ноября 2018

Вы, вероятно, не должны использовать NA таким образом. Он не позволяет таким функциям, как which, sum и cumsum работать так, как вы этого хотите. В любом случае вам, скорее всего, не нужно отмечать первую строку новой страны, поскольку большинство функций R, которые вы будете использовать для анализа, могут группироваться по Country без необходимости использования специального маркера, показывающего, где начинается каждая группа.

Ниже я изменяю NA на что-то другое и делаю transition фактором. Затем вы можете использовать cumsum для создания нового столбца.

library(data.table)
setDT(df) # assuming your data is called df

# fix transition column
df[is.na(transition), transition := 90]
df[, transition := as.factor(transition)]

# create post_conflict column
df[, post_conflict := cumsum(transition == 3), by = Country]

#        Country Year transition post_conflict
# 1: Afghanistan 1994          0             0
# 2: Afghanistan 1995          0             0
# 3: Afghanistan 1996          3             1
# 4: Afghanistan 1997          2             1
# 5: Afghanistan 1998          2             1
# 6:     Albania 1994         90             0
# 7:     Albania 1994          2             0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...