【问题标题】:Comparing each value in a vector to all other values based on criteria根据标准将向量中的每个值与所有其他值进行比较
【发布时间】:2018-05-14 13:25:14
【问题描述】:

我有一个唯一值向量,但我只想获得满足特定条件且至少有一个其他值的向量。 例如,如果我有一个像这样的向量

v <- c(1,2,5,6,8,10,15,16)

而我想要满足的标准是向量中至少有一个其他值且它们之间的差为 1 的所有值,结果将是

1,2,5,6,15,16

我希望能够使用不同的功能来做到这一点。所以对于这个例子,让我们假设我使用了一个函数,它给出了两个给定数字之间的绝对差:

AbsDiff <- function(x,y){
           abs(x-y)
           }

因此,解决方案应针对所有其他值对每个值运行 AbsDiff 函数,并获得所需的结果。

【问题讨论】:

    标签: r vector compare criteria


    【解决方案1】:

    这是您的函数的略微修改版本:

    m <- outer(v, v, FUN = function(x,y) abs(x-y) == 1)
    v[colSums(m) > 0]
    # [1]  1  2  5  6 15 16
    

    如您所见,我在您的函数中添加了一个逻辑检查,只要两个值之间的绝对差正好为 1,该检查就为 TRUE。这使得之后提取相关索引变得更加容易。


    如果你想像现在这样使用你的函数,你可以这样做:

    m <- outer(v, v, FUN = AbsDiff)
    v[colSums(m == 1) > 0]
    

    这意味着我们在第二步中检查 ==1。

    【讨论】:

    • 很好的解决方案!适用于我也尝试比较的其他功能。
    【解决方案2】:

    仍然不如@docendo 解决方案,

    v <- c(1,2,5,6,8,10,15,16)
    x <- vector()
    for(i in v){
    
      if((i+1) %in% v){
        x[length(x)+1] = i
        x[length(x)+1] = i+1
      }
    }
    
    x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 2022-06-25
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      相关资源
      最近更新 更多