r - 如何在R中的一个变量的条件下创建新矩阵?
问题描述
我有一个 长度x
变量20
x
[1] 3 3 1 2 3 1 2 1 3 1 3 1 3 2 1 1 3 1 3 2.
现在我想创建一个顺序矩阵,20 by 2
其中第一列 W_i1
用1
ifx==1
和-1
if填充x not equal to 1
。同样,第二列用1
ifx=2
和-1
if填充x not equal to 2
。如果x=3
,则两列都由 填充-1
。这是预期的结果
W_ij
[,1] [,2]
[1,] -1 -1
[2,] -1 -1
[3,] 1 -1
[4,] -1 1
[5,] -1 -1
[6,] 1 -1
[7,] -1 1
[8,] 1 -1
[9,] -1 -1
[10,] 1 -1
[11,] -1 -1
[12,] 1 -1
[13,] -1 -1
[14,] -1 1
[15,] 1 -1
[16,] 1 -1
[17,] -1 -1
[18,] 1 -1
[19,] -1 -1
[20,] -1 1
我可以分别为每一列做它并记录为一个矩阵
W_i1=ifelse(x==1,1,-1)
W_i2=ifelse(x==2,1,-1)
W_ij=matrix(c(W_i1,W_i2),
nrow = 20,
ncol =2,
byrow = F)
我可以使用任何循环吗?
任何帮助表示赞赏?
解决方案
我们可以一步完成
replace(cbind( c(-1, 1)[(x==1) + 1], c(-1, 1)[(x==2) + 1] ), x == 3, -1)
# [,1] [,2]
# [1,] -1 -1
# [2,] -1 -1
# [3,] 1 -1
# [4,] -1 1
# [5,] -1 -1
# [6,] 1 -1
# [7,] -1 1
# [8,] 1 -1
# [9,] -1 -1
#[10,] 1 -1
#[11,] -1 -1
#[12,] 1 -1
#[13,] -1 -1
#[14,] -1 1
#[15,] 1 -1
#[16,] 1 -1
#[17,] -1 -1
#[18,] 1 -1
#[19,] -1 -1
#[20,] -1 1
由于有些步骤类似,可以创建一个函数
f1 <- function(vec, v) c(-1, 1)[(vec == v) + 1]
replace(cbind(f1(x, 1), f1(x, 2)), x == 3, -1)
数据
x <- c(3, 3, 1, 2, 3, 1, 2, 1, 3, 1, 3, 1, 3, 2, 1, 1, 3, 1, 3, 2)
推荐阅读
- git - 想要在 jira 页面上显示各自作者的 git 提交
- gitlab - 将项目推送到 Gitlab 但我无法推送布局
- algorithm - 无限棋盘井字游戏的最佳数据结构
- python - DRF ForeignKey 值未部分显示
- java - 为什么 Scala 有自己的内置库?
- ruby-on-rails - 如何在覆盖另一个模块的某些方法的模块上调用类方法?
- angular - 如何在firestore angularfire中的变量中分配快照的结果
- php - 使用 Regex 从 Wikipedia API 获取信息框
- android - .DexArchiveMergerException:无法合并 dex
- azure - Kubernetes:AKS 无法查看该站点