我想根据另一个矩阵中的条件得到一个新的矩阵。原来的矩阵(矩阵1)看起来是这样的:如何根据另一个矩阵的条件为矩阵写一个for循环?
[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行中,应将第4列和第5列替换为“NA”,而在第3行中,第4列应保持“10”,并将第5列替换为“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)
返回什么是16行和包含“NA” 18列的矩阵。我几乎可以肯定,我的代码不止有一个问题。另外,事实上,这个条件只适用于matrix1 [2:16,3:17],但我不知道如何写这个。非常感谢您的帮助!
非常感谢您的帮助!我为这个令人困惑的描述感到抱歉 - 现在想做得更好。您的代码将生成一个矩阵,其中只包含最后一列(和NA值)中的名称(name1,name2等)。但是,我需要的是最后一列和实际数据(请参阅我的问题,使用的示例为10和20)中的名称的矩阵 - 但仅限于那些名称在末尾的单元格行与单元格正上方第一行中的名称相同。第三行应该导致NA,NA,NA,10,NA,...,name2。我希望现在更清楚。 – airad