0

I am trying to loop this code for all my columns where the column names are 1,2,3,4,5

MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)

How do I loop this code for columns 2,3,4 and 5 instead of doing

MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)
MoM2 <- (Data$2-lag(Data$2)) /lag(Data$2)
...
Heikki
  • 2,214
  • 19
  • 34
kaix
  • 305
  • 3
  • 10

1 Answers1

0

Does this work:

> Data
  1 2  3  4 5
1 6 5  5 10 6
2 1 8  1  9 6
3 4 4  5  8 2
4 5 1  4  5 2
5 9 9 10  5 8
> y <- lapply(Data, function(x) (x-lag(x))/lag(x))
> y
$`1`
[1]         NA -0.8333333  3.0000000  0.2500000  0.8000000

$`2`
[1]    NA  0.60 -0.50 -0.75  8.00

$`3`
[1]   NA -0.8  4.0 -0.2  1.5

$`4`
[1]         NA -0.1000000 -0.1111111 -0.3750000  0.0000000

$`5`
[1]         NA  0.0000000 -0.6666667  0.0000000  3.0000000

> names(y) <- paste0('MoM', as.numeric(names(y)))
> y
$MoM1
[1]         NA -0.8333333  3.0000000  0.2500000  0.8000000

$MoM2
[1]    NA  0.60 -0.50 -0.75  8.00

$MoM3
[1]   NA -0.8  4.0 -0.2  1.5

$MoM4
[1]         NA -0.1000000 -0.1111111 -0.3750000  0.0000000

$MoM5
[1]         NA  0.0000000 -0.6666667  0.0000000  3.0000000

> 
Karthik S
  • 11,348
  • 2
  • 11
  • 25