Фиктивная переменная с условием времени и идентификатора в длинной панели

#r #zoo #dummy-data

#r #зоопарк #фиктивные данные

Вопрос:

Я пытаюсь добавить фиктивную переменную в набор данных панели со временем, идентификатором и многими другими переменными.

 library(zoo)
geo = c("AT","AT","AT","BE","BE","BE","DE","DE","DE")
time = c("1990Q1","1990Q2","1990Q3","1990Q1","1990Q2","1990Q3","1990Q1","1990Q2","1990Q3")
Data <- as.data.frame(cbind(geo, time))
Data$time = as.yearqtr(Data$time)
 

которая на самом деле имеет 20 стран и 97 кварталов. Я не буду обходиться без адресации ‘geo’ элемент за элементом, но (время> 2004Q1), например, было бы здорово

Я хочу фиктивную переменную для Австрии и Германии, начиная со второго квартала 1990 года. Итак, я хотел бы прийти к:

     geo time     dummmy
1   AT  1990 Q1  0
2   AT  1990 Q2  1
3   AT  1990 Q3  1
4   BE  1990 Q1  0
5   BE  1990 Q2  0
6   BE  1990 Q3  0
7   DE  1990 Q1  0
8   DE  1990 Q2  1
9   DE  1990 Q3  1
 

Я не могу приблизиться к этому, я думаю о логике stata (генерировать переменную, если это так, а это что-то еще), но самое близкое, что я нахожусь в R, — это создать отдельные манекены country, затем привязать каждый к переменной time и установить их в переменную time перед извлечением всех отдельных манекенови добавляю их вместе, прежде чем связывать это с моими исходными данными. Это не может быть даже близко к лучшему решению (и не работает полностью), потому что это около 40 строк кода… Это должно быть довольно легко сделать, нет?

Любая помощь была бы отличной!

ps: Мои попытки идут по этим линиям:

 AT <- as.numeric(Data$geo == "AT")
DE <- as.numeric(Data$geo == "DE")

AT <- as.data.frame(cbind(Data$time, AT))
DE <- as.data.frame(cbind(Data$time, DE))
 

но я думаю, что я иду в неправильном направлении, и я не могу правильно определить измерение времени…

Ответ №1:

Похоже, вы должны использовать zoo библиотеку для as.yearqtr функции. Если это так, это делает столбец «время» сопоставимым со стандартными операторами сравнения. Таким образом, в основном это выглядит так, как будто вам просто нужны все значения, где time> «1990Q1» и «geo» либо «AT», либо «DE». Вы можете сделать это с помощью

 Data$dummy<-(Data$time>as.yearqtr("1990Q1") amp; Data$geo %in% c("AT","DE")) 0
 

здесь сделайте 0 , чтобы превратить логическое значение true / false в 0/1

Комментарии:

1. Отлично! Это именно то, что я искал. Спасибо, ребята! 🙂

Ответ №2:

Вы можете использовать стандартные сравнения с yearqtr объектами, поэтому попробуйте:

 Data$time >= "1990 Q2"
# [1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
Data$geo %in% c("AT", "DE") amp; Data$time >= "1990 Q2"
# [1] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE

Data$dummy <- as.numeric(Data$geo %in% c("AT", "DE") amp; Data$time >= "1990 Q2")
Data
#   geo    time dummy
# 1  AT 1990 Q1     0
# 2  AT 1990 Q2     1
# 3  AT 1990 Q3     1
# 4  BE 1990 Q1     0
# 5  BE 1990 Q2     0
# 6  BE 1990 Q3     0
# 7  DE 1990 Q1     0
# 8  DE 1990 Q2     1
# 9  DE 1990 Q3     1