【问题标题】:I there a R function for finding a minimum between to pairs?我有一个 R 函数来找到对之间的最小值吗?
【发布时间】:2019-12-06 20:42:59
【问题描述】:

我需要确定受支配的变量对:如果该对的两个值都低于数据中的其他对。

我已经尝试过minpmin 的功能,但我不确定它们是否最合适。

   a = matrix(c(50,70), ncol = 2)
   b = matrix(c(45,85), ncol = 2)

  df = rbind(a,b)

Dominance <- function(a){
   for (i in 1:nrow(a)) {
      for (j in 1:nrow(a)) {
         i1 <- rowSums(a[i,] < a[j,]) == ncol(a)
         a[i1,, drop = FALSE]
      }
   } 
   return(a) 
}
l = Dominance(df)

> l
  X1 X2
1 45 65
2 50 70

我希望这对 (45,65) 被删除。

【问题讨论】:

  • 45 65 还是45 85。你的输入b45 85
  • 如果是45 65,则删除该对。如果是45 85,则该对保留。

标签: r optimization convex


【解决方案1】:

一个选项是在大小相等的对象之间进行比较(&lt;),然后得到rowSums,如果总和等于数据集的列数,则表示该行中的所有元素小于第二个数据对应行

f1 <- function(mat1, mat2) {
            i1 <- !rowSums(mat1 < mat2) == ncol(mat1)
            i2 <- !rowSums(mat2 < mat1) == ncol(mat2)
           rbind(mat1, mat2)[c(i1, i2),, drop = FALSE]
   }

b <- matrix(c(45,65), ncol = 2)
b1 <- matrix(c(45,85), ncol = 2)



f1(a, b)
#     [,1] [,2]
#[1,]   50   70

f1(a, b1)
#     [,1] [,2]
#[1,]   50   70
#[2,]   45   85

【讨论】:

  • 看起来不错。那么如何从集合中移除被支配的对呢?即当结果为 TRUE 时?
  • 我现在正在检查!不确定它是否有效,似乎它不是存储在i1中的索引,这可能吗?
  • @Simon 这是一个逻辑向量,用which(i1) 包裹返回行位置。
  • 我认为 OP 需要 - rbind( a[rowSums(a &lt; b) == ncol(a), , drop = F], b[rowSums(b &lt; a) == ncol(b), , drop = F] )
  • @Simon 您是否需要检查反向并按照 Shree 的建议执行 rbind
猜你喜欢
  • 2015-06-09
  • 2013-11-10
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
相关资源
最近更新 更多