【问题标题】:save a loop while an matriz or a data frame在矩阵或数据框时保存循环
【发布时间】:2021-03-22 13:21:28
【问题描述】:

我想在矩阵或数据框中保存一段时间,以便让我井井有条

i <- 15#year
pon<-list()
while (i < 63) {
pon[i] <-cumprod( vlookup(i:62,Tabla_de_mortalidad_css,4))
 i = i+1}

这是我正在执行的命令 我希望您打印类似的内容:例如

v1 v2 v3
1
2  1
3  2  1
4  3  2
.  .  .
.  .  .
.  .  .

v1、v2、v3 是我的变量

【问题讨论】:

    标签: r while-loop


    【解决方案1】:

    你需要这样的东西吗?

    n <- 1:63
    mat <- cbind(1:63, sapply(1:3, function(x) c(rep(NA, x), head(n, -x))))
    mat
    
    #      [,1] [,2] [,3] [,4]
    # [1,]    1   NA   NA   NA
    # [2,]    2    1   NA   NA
    # [3,]    3    2    1   NA
    # [4,]    4    3    2    1
    # [5,]    5    4    3    2
    # [6,]    6    5    4    3
    # [7,]    7    6    5    4
    #...
    #...
    

    【讨论】:

    • 感谢您的评论,我还有一个问题,如何使这个命令适用于我上面的代码,即:` i # year while (i put [i] <-cumprod (vlookup (i: 62, Mortality_Table_css, 4))`i = i + 1}` 因为我在我的表中寻找 i,在 i:62 的范围内,结果为我积累了它,我想要的是将它保存在数据中框架,其中每个i必须是一列,但是如果你看下一次迭代它会是i = 16,也就是说,我需要对每一列等等。
    • 我不明白你的代码在做什么,vlookup 等是什么
    【解决方案2】:

    使用tidyverse

    library(tidyverse)
    n <- 1:10
    Lag <- 1:3
    
    df <- data.frame(n = n)
    bind_cols(df, map_dfc(Lag, ~transmute(df, !!paste0("Lag", .x) := lag(n, n = .x))))
    #>     n Lag1 Lag2 Lag3
    #> 1   1   NA   NA   NA
    #> 2   2    1   NA   NA
    #> 3   3    2    1   NA
    #> 4   4    3    2    1
    #> 5   5    4    3    2
    #> 6   6    5    4    3
    #> 7   7    6    5    4
    #> 8   8    7    6    5
    #> 9   9    8    7    6
    #> 10 10    9    8    7
    

    由reprex package (v0.3.0) 于 2020 年 12 月 11 日创建

    【讨论】:

    • 感谢您的评论,我还有一个问题,如何使这个命令适用于我上面的代码,即` i while (i <63) { put [i] &lt;-cumprod (vlookup (i: 62, Mortality_Table_css, 4)) i = i + 1} 因为我在我的表中查找 i,在 i:62 范围内,结果为我累积它,我想要将它保存在数据框中,其中每个 i 必须是一列,但是如果你看下一次迭代就会是i = 16,也就是每一列我都需要以此类推。
    【解决方案3】:

    我们可以使用来自data.table 的shift 轻松做到这一点

    library(data.table)
    do.call(cbind, shift(1:10, n = 1:3))
    

    -输出

    #        [,1] [,2] [,3]
    # [1,]   NA   NA   NA
    # [2,]    1   NA   NA
    # [3,]    2    1   NA
    # [4,]    3    2    1
    # [5,]    4    3    2
    # [6,]    5    4    3
    # [7,]    6    5    4
    # [8,]    7    6    5
    # [9,]    8    7    6
    #[10,]    9    8    7
    

    【讨论】:

    • 感谢您的评论,我还有一个问题,如何使这个命令适用于我上面的代码,即` i while (i <63) { pon [i] &lt;-cumprod (vlookup (i: 62, Mortality_Table_css, 4)) i = i + 1} 因为我在表中查找 i,范围为 i:62,结果为我累积,我想要将它保存在数据框中,其中每个 i 必须是一列,但是如果你看下一次迭代就会是i = 16,也就是我需要的每一列都以此类推。
    猜你喜欢
    • 2014-11-21
    • 2023-03-22
    • 1970-01-01
    • 2017-03-24
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多