我如何填充这个矩阵(然后将其概括为 3D 数组)循环并使用条件?在 R
How can i fill this matrix (then generalize it to an 3D-array) whit a loop and using conditions too? in 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
。
我想从 1 到 3 创建另一个变量 k
。我试过了,但是循环只显示 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
我想填充一个向量vec
,其中vec[1]=5
(因为如您所见,age=15
),vec[2]=2
(因为,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
但是 foor 循环只显示最后一次迭代:
# [1] 4 4 4 4 4 4 4 4 4
我想要下一个结果:
[1] 5 2 3 8 1 6 7 9 4
这只是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)]
我只想填这个矩阵,我知道这是一个很简单的问题,但我一点都不擅长。 我不会在矩阵中使用这些数字。 我试过 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
。
我想从 1 到 3 创建另一个变量 k
。我试过了,但是循环只显示 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
我想填充一个向量vec
,其中vec[1]=5
(因为如您所见,age=15
),vec[2]=2
(因为,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
但是 foor 循环只显示最后一次迭代:
# [1] 4 4 4 4 4 4 4 4 4
我想要下一个结果:
[1] 5 2 3 8 1 6 7 9 4
这只是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)]