【发布时间】:2021-02-15 21:25:24
【问题描述】:
我正在尝试为列名称为 1、2、3、4、5 的所有列循环此代码
MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)
我如何为第 2、3、4 和 5 列循环这段代码,而不是这样做
MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)
MoM2 <- (Data$2-lag(Data$2)) /lag(Data$2)
...
【问题讨论】:
我正在尝试为列名称为 1、2、3、4、5 的所有列循环此代码
MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)
我如何为第 2、3、4 和 5 列循环这段代码,而不是这样做
MoM1 <- (Data$1-lag(Data$1)) /lag(Data$1)
MoM2 <- (Data$2-lag(Data$2)) /lag(Data$2)
...
【问题讨论】:
这行得通吗:
> 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
>
【讨论】: