r - 我怎样才能用循环填充这个矩阵(然后将其推广到 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
我想填充一个向量vec
where 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
解决方案
这只是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)]
推荐阅读
- azure - 将 Azure IoT Hub 设备孪生导出到 Blob 存储
- python - 如何在python中计算字符串中的重复字符
- asp.net-core - 如何使用列表列表发布表单数据?
- html - 如何在底部为所有 3 个对齐的图像创建透明文本框叠加层
- python - 如何使用 Python2 中的“密码学”库从证书中打印公钥?
- mysql - 从 MySQL 运行 SELECT 时 JSON 长度的最大限制是多少
- android - 查找“不再支持 NdkCompile”的来源
- python - proc 与重量 python 等效的平均值
- php - 无法打开邮箱:远程规范无效
- c# - WPF Tabcontrol 具有用于 tabitems 的扩展器功能