代码之家  ›  专栏  ›  技术社区  ›  Varun

r通过两个向量循环并将结果存储在数据帧中

  •  0
  • Varun  · 技术社区  · 6 年前

    我想循环两个向量中的元素。在每次迭代之后,我希望将每次迭代的结果存储为数据帧中的一列。我想继续迭代直到两个向量的所有元素都被覆盖。

    我的尝试

    # Define the size of my sample
    n <- 446
    
    # Preparing my vectors (n1 & n2)
    p1 <- runif(18,0.8,0.95)
    p2 <- 1 - p1
    n1 <- round(p1*n)
    n2 <- n - n1
    
    #Creating empty df to store values of each iteration
    df=data.frame()
    
    #Building loop
    for(i in 1:length(n1)) {
      for(j in 1:length(n2)) {
        tmp=sample(c(sample(4:5, n1[i], replace = TRUE), sample(1:3, n2[j], replace = TRUE)))
        df=rbind(df,tmp)
      }
    }
    

    然而,我的循环似乎没有产生我想要的输出。

    期望输出

    理想情况下,输出为-

    1)具有446行和18列的数据帧 2)每个列包含1到5之间的值,如前面步骤中定义的那样

    任何投入都将受到高度赞赏

    1 回复  |  直到 6 年前
        1
  •  1
  •   jogo    6 年前

    你可以做到:

    set.seed(42)
    
    # Define the size of my sample
    n <- 446
    
    # Preparing my vectors (n1 & n2)
    p1 <- runif(18,0.8,0.95)
    # p2 <- 1 - p1
    n1 <- round(p1*n)
    # n2 <- n - n1
    
    D <- sapply(n1, function(n1i) sample(c(sample(4:5, n1i, replace = TRUE), sample(1:3, n-n1i, replace = TRUE))))
    

    这会给你一个矩阵 D . 您可以将其强制为数据帧:

    D2 <- as.data.frame(D)