我想遍历两个向量中的元素。每次迭代之后,我想将每次迭代的结果存储为数据框中的一列。我想继续迭代,直到覆盖了两个向量的所有元素。
我的尝试
# 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之间,如先前步骤所述
任何输入都会受到赞赏
答案 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)