我的矩阵看起来像这样:
实际上,我每天和每小时输出一周,这意味着我每天有7个矩阵,每小时有168个矩阵。
我想要的输出是:
1:获取每个矩阵的整行,第三列的第一个值大于99.
例如:
[8,] 8, 3.5959768, 99.10497, 794880
2:从第二列的第一个值小于1的每个矩阵中获取整行。
例如:
[14,] 14, 0.7453416, 94.40994, 198720
3:需要从每个矩阵中捕获两行。
最后,我需要将从所有矩阵中捕获的所有行合并为一个。所以,对于每天我们应该有14行,每小时我们应该有336行。
答案 0 :(得分:1)
通过以文本格式提供数据(作为打印矩阵的副本或dput
的输出),您的问题将得到改善。
如果没有,那么这里有一些样本数据:
set.seed(123)
matrices <- replicate(7,
cbind(1:21, rnorm(21, 2, 1), rnorm(21, 99, 3), rnorm(21, 1e5, 1e5)),
simplify = FALSE)
您可以按照以下方式执行以下操作:
get_rows <- function(mat) {
rbind(mat[which(mat[, 3] > 99)[1], , drop = FALSE],
mat[which(mat[, 2] < 1)[1], , drop = FALSE])
}
desired_row_list <- lapply(matrices, get_rows)
desired_rows <- do.call("rbind", desired_row_list)
使用指定的条件对每个矩阵进行子集设置,始终只返回第一行以满足这些条件。然后它将它们全部连接成一个带有rbind
的矩阵。
desired_rows
# [,1] [,2] [,3] [,4]
# [1,] 6 3.71506499 101.51336 53334.46
# [2,] 8 0.73493877 95.58559 91663.09
# [3,] 2 0.92820877 99.99535 21509.55
# [4,] 1 0.98142462 98.33854 95497.23
# [5,] 1 2.23538657 101.06375 151686.20
# [6,] 9 -0.05324722 98.15881 103778.84
# [7,] 1 1.50070798 99.35774 90968.04
# [8,] 6 0.68919847 104.02709 81707.46
# [9,] 2 2.09049665 101.54893 106670.09
# [10,] 8 0.46709800 93.99757 24731.10
# [11,] 3 0.74135137 101.59734 357145.81
# [12,] 3 0.74135137 101.59734 357145.81
# [13,] 6 0.94498296 101.01209 54966.14
# [14,] 2 0.20971876 98.77933 128642.44