【发布时间】:2017-05-05 10:18:19
【问题描述】:
我正在尝试根据另一个矩阵中的条件获取一个新矩阵。原始矩阵(矩阵1)如下所示:
[empty] |V1 |V2 |V3 |V4 |V5 |.... |V17 | V18
1 |NA |NA |name1 |name2 |name3 |.... |name15|NA
2 |abc |2016 |NA |10 |20 |.... |NA |name1
3 |abc |2016 |NA |10 |20 |.... |NA |name2
4 |abc |2016 |NA |10 |20 |.... |NA |name3
... |abc |2016 |NA |10 |20 |.... |NA |....
16 |abc |2016 |NA |10 |20 |.... |NA |name15
我要编码的是一个新矩阵(矩阵 2),它具有以下条件:如果相关列中矩阵 1 的第一行的值等于相关列中矩阵 1 的最后一列的值行,矩阵 2 应在相关单元格中写下最初在矩阵 1 中的值;如果条件不成立,则应写为“NA”。例如,在第 2 行中,第四列和第五列应替换为“NA”,而在第 3 行中,第四列应保持“10”,第五列应替换为“NA”。 到目前为止,这是我编写的代码:
a<-seq(1:16)
b<-seq(1:18)
matrix2<- matrix(nrow=16, ncol=18)
for(i in 1:dim(matrix2)[1]) {
for(j in 1:dim(matrix2)[2]) {
matrix2[i,j] = if("matrix1[a,b]"=="matrix1[a,18]") {"matrix1[a,b]"} else {"NA"}
}
}
print(matrix2)
返回的是一个包含“NA”的 16 行 18 列的矩阵。我几乎可以肯定我的代码不止一个问题。此外,事实上,该条件应该只适用于 matrix1[2:16,3:17] 但我不知道如何写这个。非常感谢您的帮助!
【问题讨论】:
标签: r loops if-statement matrix