-2

I have the following dataset:

library(dplyr)
dat <- tibble(
  IDnumber = rep(c("IT974", "IT920", "IT901"), c(2,2,3)), 
  Sales = c(16565,16895,2842,2069,1563,1247,1115), 
  Leverage = c(1.25,1.29,1.36,1.22,1.21,1.13,1.13)
)

What I would do is lagging variables one year further, only when my IDnumber is the same as the year before, otherwise I would show the value 0.

I used this code but it doesn't work:

library(Hmisc)
for(i in c(length(IDnumber))) {
  if (IDnumber[i] == IDnumber[i-1])
    Lag_Leverage <- Lag(Leverage)
  if (IDnumber[i] != IDnumber[i-1])
    Lag_Leverage <- 0
}
LucaCoding
  • 65
  • 12

1 Answers1

1

You could do it this way:

library(dplyr)
dat <- tibble(
  IDnumber = rep(c("IT974", "IT920", "IT901"), c(2,2,3)), 
  Sales = c(16565,16895,2842,2069,1563,1247,1115), 
  Leverage = c(1.25,1.29,1.36,1.22,1.21,1.13,1.13)
)
dat %>% group_by(IDnumber) %>% 
  mutate(Lag_Sales = lag(Sales, default=0), 
         Lag_Leverage = lag(Leverage, default=0))
# # A tibble: 7 x 5
# # Groups:   IDnumber [3]
#   IDnumber Sales Leverage Lag_Sales Lag_Leverage
#   <chr>    <dbl>    <dbl>     <dbl>        <dbl>
# 1 IT974    16565     1.25         0         0   
# 2 IT974    16895     1.29     16565         1.25
# 3 IT920     2842     1.36         0         0   
# 4 IT920     2069     1.22      2842         1.36
# 5 IT901     1563     1.21         0         0   
# 6 IT901     1247     1.13      1563         1.21
# 7 IT901     1115     1.13      1247         1.13
DaveArmstrong
  • 18,377
  • 2
  • 13
  • 25