首页 > 解决方案 > 我怎样才能用循环填充这个矩阵(然后将其推广到 3D 数组)并使用条件?在 R 中

问题描述

我只是想填充这个矩阵,我知道这是一个非常容易的问题,但我一点也不擅长。我不会在矩阵中使用这些数字。我曾尝试使用 for 循环,但问题是此循环仅显示最后一次迭代。我再说一遍,我不想要从 1 到 9 的数字。我有这个:

(mat<-matrix(0, nrow = 3, ncol = 3))
for (i in 1:3) {
  for (j in 1:3) {
    if (j==1 & i==1) {
      mat[i,j]=6
    } else if (j==1 & i==2) {
      mat[i,j]=7
    } else if (j==1 & i==3) {
      mat[i,j]=8
    }
  }
}

我想要一个没有条件的代码& i==1, & i==2, & i==3。我想制作另一个k从 1 到 3 的变量。我试过这个,但循环只显示 3 中的值。非常感谢。

编辑:我将向您展示一个我想解决的示例。你会看到这是同样的问题。我有下一个数据框:

base2<-c(  20, 15, 17, 23, 19, 21, 16, 22, 18)
base2.1<-c( 6,  5,  3,  4,  1,  7,  2,  9,  8)
base3<-data.frame(base2,base2.1)
names(base3)=c("age","mean")

base3

我想填充一个向量vecwhere vec[1]=5(because as you can see, age=15), vec[2]=2(because , age=16) 等等,依此类推。

我只为第一个元素尝试了这个:

(vec<-c(rep(0,length(base3$mean))))

for (i in 1:length(base3$mean)) {
  if (base3$age[i]==15) {
    vec[1]=base3$mean[which(base3$age==15)]
      } 
}
vec

当然,我不想将数字 1 放在循环的这一部分:vec[1]=base3$mean[which(base3$age==15)

如果我想填充整个向量,我有这个:

for (i in 1:length(base3$mean)) {
  for (j in sort(base3$age)) {
vec[i]=base3$mean[which(base3$age==j)]  
 }
}
vec

但是 for 循环只显示了最后一次迭代:

# [1] 4 4 4 4 4 4 4 4 4

我想要下一个结果:

[1] 5 2 3 8 1 6 7 9 4

标签: rloopsmatrixconditional-statementsfill

解决方案


这只是order向量age并使用返回索引向量的索引mean

i <- order(base3$age)
vec <- base3$mean[i]

vec
#[1] 5 2 3 8 1 6 7 9 4

help("order"),和区别来sort
单线是

vec <- base3$mean[order(base3$age)]

推荐阅读