【问题标题】:Conditional selection of values between columns列之间值的条件选择
【发布时间】:2014-10-07 11:19:28
【问题描述】:

有一个矩阵:

        A   B

        0   36
        0   4
        4   24
        0   13
        0   11
        11  13
        0   6
        6   20
        0   12
        12  20
        0   11
        0   33
        33  40
        0   31
        0   5
        5   39
        0   7
        7   32
        0   34
        0   13
        0   16
        16  24

我想:

1) 首先对 B 列进行排序(在 A 列和 B 列之间保持相同的对)以找到 最小值,例如 x1。在这个矩阵中,x1 是“4”。

2) 然后在 A 列中找到大于或等于 x1 的值。(排序 A 列可以 使这一步更容易。仍然在 A 列和 B 列之间保持相同的对)。
在 B 列中匹配的配对值中,A 列中的值更大 大于或等于 x1,找到最小的值,比如 x2。

在这个矩阵中,A列有4、5、6、7....大于或等于x1、4。 在 A 列和 B 列之间的匹配对中,8 个是最小的。

3) 然后在 A 中找到大于或等于 x2 的值。 在 B 中的匹配配对值中,A 中的值更大 大于或等于 x2,找到最小的值,比如 x3。

4) 以此类推。

如何使用 R 来完成此任务?使用“dplyr”? 感谢您的帮助。

【问题讨论】:

    标签: r algorithm matrix dplyr


    【解决方案1】:

    我不确定你到底想要什么,但我认为你可以在没有dplyr 的情况下完成这项任务。我使用subset()min() 遵循了您在问题中描述的内容。请注意我这里有一个数据框,而不是矩阵。 mydf 是你的数据框。

    foo <- mydf[order(mydf$B),] #sort your data frame
    x1 <- min(foo$B)
    
    #> x1
    #[1] 4
    
    foo2 <- subset(foo, A >= x1)
    x2 <- min(foo2$B)
    
    #> x2
    #[1] 8
    
    foo3 <- subset(foo2, A >= x2)
    x3 <- min(foo3$B)
    

    【讨论】:

    • 嗨,爵士乐:它有效。非常感谢你。接下来我将尝试编写一个循环来完成这个任务。再次感谢。
    • @Jason 很高兴这对您有所帮助。
    猜你喜欢
    • 2014-04-16
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多