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

R Loop through two vectors and store results in dataframe

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

我的尝试

# 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 之间的值,如前面步骤中所定义

任何输入将不胜感激

你可以这样做:

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)