在R中如何为矩阵分配多个值?

huangapple go评论62阅读模式
英文:

How to assign multiple values for a matrix in R?

问题

我有一个93060行141列的矩阵文件,其中填充了数值。
我需要根据以下条件将一些行和列赋值为零:第1行的第1列到第65行的第1列;第67行到第131行的第2列;第133行到第197行的第3列,依此类推。
这个条件会排除某些列,也就是第10、20、36列的行的数值保持不变。

我认为我会需要一个for循环。但我不知道如何编写代码来表达所述条件下行和列的关联。

英文:

I have a 93060-by-141 matrix file with filled values.
I need to assign zeros to some rows and columns with the condition: Row 1: 65 of column 1; row 67:131 of column 2; row 133:197 of column 3 and so on.
This condition excludes for some column, i.e the values in rows of column 10,20,36 are unchanged.

I think I will need a For-loop. But I have no idea how to code for the link of rows and columns expressing the mentioned condition.

答案1

得分: 2

可以通过提供一个索引矩阵来更改多个值。索引对应于单元格的行数(第一列)和列数(第二列)。例如,执行mymat[cbind(1:10, 1)] <- 0将把第一到第十行的第一列更改为零。在你的情况下,你可以将多个这样的cbind()语句组合在一起,然后使用rbind()来调用它们。例如,mymat[rbind(cbind(1:5, 1), cbind(6:10, 2))] <- 0将把第一到第五行的第一列和第六到第十行的第二列更改为零。在你提出的示例中,它将是这样的:

my_mat[rbind(
  cbind(1:65, 1), 
  cbind(67:131, 2),
  cbind(133:197,3))] <- 0 
英文:

You can change multiple values by providing a matrix of indexes to a matrix. The indices correspond with the row (first column) and column (second column) numbers of the cells. For example doing mymat[cbind(1:10, 1)] <- 0 would change the first through tenth rows of column 1 to zero. In you case, you could put together several such cbind() statements with a call to rbind(). For example, mymat[rbind(cbind(1:5, 1), cbind(6:10, 2))] <- 0 would change the first through fifth rows of column 1 and the sixth through tenth rows of column 2 to zero. In the example you proposed above, it would be something like this:

my_mat[rbind(
  cbind(1:65, 1), 
  cbind(67:131, 2),
  cbind(133:197,3))] <- 0 

huangapple
  • 本文由 发表于 2023年2月8日 09:28:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/75380573.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定