【问题标题】:Looping for all columns in R [duplicate]循环R中的所有列[重复]
【发布时间】: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)
...

【问题讨论】:

    标签: r loops


    【解决方案1】:

    这行得通吗:

    > 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
    
    > 
    

    【讨论】: