R遍历两个向量并将结果存储在数据帧中

时间:2019-02-01 10:16:11

标签: r loops rbind

我想遍历两个向量中的元素。每次迭代之后,我想将每次迭代的结果存储为数据框中的一列。我想继续迭代,直到覆盖了两个向量的所有元素。

我的尝试

# 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 个答案:

答案 0 :(得分:1)

您可以这样做:

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)