【问题标题】:How to get my desired row and combine them together in R?如何获得我想要的行并将它们组合在 R 中?
【发布时间】:2017-04-18 07:48:54
【问题描述】:

我的矩阵看起来像这样:

实际上,我有一周的每日和每小时输出,这意味着我每天有 7 个矩阵,每小时有 168 个矩阵。

我想要的输出是:

1:从每个矩阵中获取第三列第一个值大于99的整行。

例如:

[8,]    8,   3.5959768,   99.10497,  794880

2:从第二列第一个值小于 1 的每个矩阵中获取整行。

例如:

[14,]   14,   0.7453416,   94.40994,  198720

3:需要从每个矩阵中捕获两行。

最后,我需要从所有矩阵中捕获的所有行合并为一个。所以,每天我们应该有 14 行,每小时我们应该有 336 行。

【问题讨论】:

    标签: r


    【解决方案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
    

    【讨论】:

    • 我有包含很多 NA 的代码。这意味着我在等式中遇到的问题。如何跳过 NA 是原始矩阵。这是我现在的输出。 [,1] [,2] [,3] [,4] [1,] NA NA NA NA [2,] NA NA NA NA [3,] 18 3.5393546 99.96172 2782080 [4,] 26 0.9042754 99.99974 1987200 [5 ,] 16 3.4636758 99.95194 2384640 [6,] 23 0.9805512 99.99901 1689120
    • 使用which查看修改后的版本。
    • 非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2020-02-11
    • 2020-05-07
    相关资源
    最近更新 更多