#r #dataframe
#r #фрейм данных
Вопрос:
Давайте рассмотрим панельные данные с удаленными 300 строками
data("EmplUK", package="plm")
set.seed(42)
EmplUK<-EmplUK[-sample(1:nrow(EmplUK),300),]
firm year sector emp wage capital output
1 1 1977 7 5.041 13.1516 0.5894 95.7072
4 1 1980 7 4.715 13.8039 0.6171 100.5501
5 1 1981 7 4.093 14.2897 0.5076 99.5581
6 1 1982 7 3.166 14.8681 0.4229 98.6151
7 1 1983 7 2.936 13.7784 0.3920 100.0301
8 2 1977 7 71.319 14.7909 16.9363 95.7072
Я хочу добавить тренд для этого фрейма данных, т.Е. Иметь числа от 1: что-то для каждой фирмы.
Проблема в том, что у каждой фирмы нет некоторого количества наблюдаемых лет, т.Е. У фирмы 1977, 1980, 1981, 1982 (поэтому вектор тренда для фирмы 1 должен быть: 1,2,3,4). Третья фирма имеет 1977,1979,1980,1981,1982,1983 (вектор тренда для третьей фирмы должен быть: 1,2,3,4,5,6).
Я не уверен, как это можно сделать легко. Я знаю, что для каждой фирмы я могу создать unique()
вектор лет и пронумеровать 1:length(uniqie())
. Все в порядке, есть ли какой-нибудь более простой способ, как это можно выполнить?
Ответ №1:
Не уверен, чего вы хотите, но попробуйте этот подход с dplyr
:
library(dplyr)
data("EmplUK", package="plm")
set.seed(42)
EmplUK<-EmplUK[-sample(1:nrow(EmplUK),300),]
#Code
New <- EmplUK %>% group_by(firm) %>% mutate(Trend=row_number())
Вывод:
# A tibble: 731 x 8
# Groups: firm [140]
firm year sector emp wage capital output Trend
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
1 1 1977 7 5.04 13.2 0.589 95.7 1
2 1 1980 7 4.72 13.8 0.617 101. 2
3 1 1981 7 4.09 14.3 0.508 99.6 3
4 1 1982 7 3.17 14.9 0.423 98.6 4
5 1 1983 7 2.94 13.8 0.392 100. 5
6 2 1977 7 71.3 14.8 16.9 95.7 1
7 2 1978 7 70.6 14.1 17.2 97.4 2
8 2 1980 7 72.0 15.5 17.7 101. 3
9 2 1982 7 72.4 16.1 16.2 98.6 4
10 3 1977 7 19.2 22.7 7.10 95.7 1
# ... with 721 more rows