#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