如何从 4 维矩阵中删除一些值?

How to remove some values from a 4-dimensional matrix?

我在 R 中使用 4 维矩阵(年、模拟、流、时间瞬间:10x5x20x10)。我需要从矩阵中删除一些值。例如,对于第 1 年,我需要删除模拟编号 1 和 2;对于第 2 年,我需要删除模拟编号 5。

任何人都可以建议我如何进行此类更改吗?

Arrays(这是 R 文档通常指代高维 'matrices' 的方式)可以用与矩阵或向量相同的方式用负值索引:a负值删除相应的 row/column/slice。所以如果你想完全删除第 1 年(例如),你可以使用 a[-1,,,];要完全删除模拟 5,a[,-5,,].

但是,数组不能“参差不齐”,每个row/column/slice组合中必须有东西。您可以用 NAs 替换要删除的值(然后确保在计算时适当地考虑 NAs,例如在 sum()/[ 中使用 na.rm = TRUE =17=]/max()/median()/等):a[1,1:2,,] <- NAa[2,5,,] <- NA 在你的例子中。

如果您知道 Flow 和 Time 的所有值将始终存在,您可以将数据存储为矩阵列表的列表:例如

results <- list(Year1 = list(Simulation1 = matrix(...),
                             Simulation2 = matrix(...),
                             ...),
                Year2 = list(Simulation1 = matrix(...),
                             Simulation2 = matrix(...),
                             ...))

然后您可以轻松删除年份或年份内的模拟(通过将它们设置为 NULL,但这会使索引变得有点困难(例如,“检索所有年份的 Simulation1 值”需要 lapply 或跨年的循环)。