У меня есть сбалансированные панельные данные, где идентификатор (cnpjcei) регистрируется каждый год, показывая общее количество людей, занятых в данной фирме. Моя цель - учесть разницу между сотрудниками в (t) и сотрудниками в (t-1) за все годы в базе данных (в случае, empreg (t) - empreg (t-1))
# A tibble: 386,763 x 3
ano cnpjcei empreg
<dbl> <chr> <dbl>
1 2006 1000786001505 10
2 2007 1000786001505 12
3 2008 1000786001505 16
4 2009 1000786001505 19
5 2010 1000786001505 7
6 2011 1000786001505 7
7 2012 1000786001505 7
8 2013 1000786001505 7
9 2014 1000786001505 8
10 2015 1000786001505 9
# ... with 386,753 more rows
Что-то вроде этого:
# A tibble: 386,763 x 4
ano cnpjcei empreg variation_empreg
<dbl> <chr> <dbl>
1 2006 1000786001505 10
2 2007 1000786001505 12 2
3 2008 1000786001505 16 4
4 2009 1000786001505 19 3
5 2010 1000786001505 7 -12
6 2011 1000786001505 7 0
7 2012 1000786001505 7 0
8 2013 1000786001505 7 0
9 2014 1000786001505 8 1
10 2015 1000786001505 9 1
# ... with 386,753 more rows
У кого-нибудь есть идеи? Спасибо :)
Вы можете использовать diff
:
library(dplyr)
df %>% mutate(variation_empreg = c(NA, diff(empreg)))
#> ano cnpjcei empreg variation_empreg
#> 1 2006 1000786001505 10 NA
#> 2 2007 1000786001505 12 2
#> 3 2008 1000786001505 16 4
#> 4 2009 1000786001505 19 3
#> 5 2010 1000786001505 7 -12
#> 6 2011 1000786001505 7 0
#> 7 2012 1000786001505 7 0
#> 8 2013 1000786001505 7 0
#> 9 2014 1000786001505 8 1
#> 10 2015 1000786001505 9 1
Данные
df <- structure(list(ano = 2006:2015, cnpjcei = c("1000786001505",
"1000786001505", "1000786001505", "1000786001505", "1000786001505",
"1000786001505", "1000786001505", "1000786001505", "1000786001505",
"1000786001505"), empreg = c(10L, 12L, 16L, 19L, 7L, 7L, 7L,
7L, 8L, 9L)), row.names = c("1", "2", "3", "4", "5", "6", "7",
"8", "9", "10"), class = "data.frame")
это работает! большое спасибо, Аллан
df$variation_empreg <- c(NA, diff(df$empreg))