【发布时间】:2016-09-23 22:52:53
【问题描述】:
这可能与之前发布的其他问题类似,但我找不到完全匹配的问题(如果它已经在此处,请指导我)。
无论如何,我有一个 19 列和约 5,000 行的矩阵。每行包含一个介于 0.0 和 1 之间的值,增量为 0.1(因此,0.0, 0.1,0.2...1.0),如下所示:
0 0.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
所以向量从 1 变为 0.1,然后从 1 重新开始并转移到下一列。我想要一个基本上从一行到另一行的函数,看看是否有一个数值,然后将 1 减去该值放在向量中的下一个位置。实际上是这样的:
0 0.6 0.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.5 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.4 0.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.9 0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.8 0.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我已经尝试了一些“应用”或只是基本重新编码的方法,但诀窍是让它遍历所有约 5,000 行。也许我应该通过列来接近它?
【问题讨论】:
-
您可以使用
ifelse处理列,检查前一列值并在条件匹配时更改当前列。ifelse是矢量化的,因此每列操作都很快。你需要一个 for 循环从最右边的列开始到左边。 -
另一种方法是计算所有要更改的单元格的索引,放入一个向量中,将所有要更新的值按相同的顺序计算,放入另一个向量中,然后按索引进行更新.