【问题标题】:Testing whether two vectors are increasing or decreasing in R测试两个向量在 R 中是增加还是减少
【发布时间】:2017-05-17 04:16:30
【问题描述】:

我想知道在基础 R 中是否有一种方法可以测试两个向量(两者)是增加还是减少?

例如,在测试 ab(见下文)时,测试应返回 FALSE,在测试 cd(见下文)时,测试应返回 TRUE

a = 5:10
b = 10:5
c = seq(-5, 15)
d = seq(-15, -8)

为了清楚起见,我询问任何 两个向量(当两者都排序但不管它们的长度如何)是否递减(例如,10:0100:97 , -8:-10) 则测试应返回 TRUE,否则如果两个向量都再次增加,则测试应返回 TRUE,否则应返回 FALSE。

【问题讨论】:

  • 为什么 5:10 没有增加?编辑:现在我看到您的编辑后,测试 (a, b) 和 (c, d)。
  • 如果x 增加,y 是否也必须增加才能成为TRUE?或者xy 可以朝不同的方向走,只要它们是单调的?
  • 我没有投反对票,但你的问题不是很清楚。举例说明您期望的不同输入和输出,以确保人们能够理解您的要求。
  • 多么重要的问题!!抱歉,不知道谁以及为什么真的让这个问题被否决!
  • 好的,我认为 Ben 的答案不适用于减少向量(试试看)。如果您的问题不清楚,您会得到不符合您要求的答案,这不是回答者的错。

标签: r function vector


【解决方案1】:

“两个向量都在增加”是

all(diff(x)>0) && all(diff(y)>0)

“两个向量都在减少”将是

all(diff(x)<0) && all(diff(y)<0)

您可以将这些与||(或)结合使用。

【讨论】:

  • 将它修改为看起来像一个函数可能会有所帮助,因为它适用于任意两个任意向量?
  • Ben,你的答案有问题,用它做一个简单的函数:uneq.vec = function(x, y) all(diff(x) &gt; 0) &amp;&amp; all(diff(y) &gt; 0) 然后测试 OP 的要求。例如,当两个向量减少时,您的公式将失败:uneq.vec(x = 10:5, y = 4:0),在这种情况下 OP 需要 TRUE 而您的公式返回 FALSE
  • 这个解决方案有一个缺点,因为它要求严格增加为 TRUE。但是,根据@parvin,uniq.vec(c(1,2,1,4,5), c(5:10)) 也应该是 TRUE 而不是 FALSE。
  • OP 对此并不是特别清楚(他们确实接受了我的回答)。我宁愿他们用具体的例子来编辑他们的问题,以确认“有增加的趋势”是什么意思;这是否意味着例如线性回归的斜率是正的吗?
  • 是的,我知道这不是很清楚。所以我想说总是让 OP 在给出答案之前澄清问题。
【解决方案2】:

根据@parvin,“增加”的定义只是“有增加的趋势”。所以我建议不要使用diff,而是使用lm

假设我有两个数字向量,xy,这是我的解决方案:

unname(!xor(lm(x ~ seq_along(x))$coefficient[2] > 0, lm(y ~ seq_along(y))$coefficient[2] > 0))

xor 完全满足了需求,因此我们可以摆脱将两个语句与||| 组合在一起。 unname 用于简单删除系数名称。

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2021-08-05
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多