【问题标题】:How to compare different lengths of a vector?如何比较不同长度的向量?
【发布时间】:2015-03-20 08:52:51
【问题描述】:

我有两个向量:

A <- 10 10 20 19 24 24 17 18 24 24 24 25 16 16 16 25 25 12 12 12 25 24 24 24 24  2  2

B <- 2 4 2 2 2 3 2 3 2 3 2

我想比较 A 的前两个元素(这里:10 10)。为什么?因为 B 的第一个条目是两个。然后我想比较A中的元素3到6(即:20 19 24 24),因为B的第二个元素是4。以此类推……

当我说我想比较它们时,我想做的是查看所选范围的任何元素是否低于阈值(例如,低于 20)以及它们中的另一个元素是否大于另一个阈值(例如 23)。

期望的输出是计算这两个条件的次数 完成(这里最多可能发生 11 次,因为 B 的长度为 11,这意味着我的向量 A 有 11 个范围将被比较)。在此示例中,只有第二个范围会满足条件。因此,输出将为 1。如果可以说它是满足条件的第二个范围,那也很好。因此输出将是这样的:

count: 1     range: 2

有人知道怎么做吗?

【问题讨论】:

  • 你比较的阈值是从哪里来的?它会在另一个向量中,还是以某种方式包含在您上面已经提供的数据中?
  • 我确实编辑了我的帖子以提供更多我想要的信息。
  • 是的,阈值是固定的。
  • 我已经根据示例发布了我的结果。是 1。因为在本例中这两个阈值都只满足一次。
  • @akrun:是的,完全正确。它们都低于 20,但都不高于 23。因此,它是 0。

标签: r vector compare


【解决方案1】:

这可能有帮助

res <- tapply(A,rep(seq_along(B), B), FUN=function(x)  any(x < 20) & 
                    any(x>23))+0L
res 
# 1  2  3  4  5  6  7  8  9 10 11 
# 0  1  0  0  0  0  0  0  0  0  0 

d1 <- data.frame(count=res, range=names(res))
head(d1,3)
#   count range
#1     0     1
#2     1     2
#3     0     3

数据

A <- c(10, 10, 20, 19, 24, 24, 17, 18, 24, 24, 24, 25, 16, 16, 16, 
   25, 25, 12, 12, 12, 25, 24, 24, 24, 24, 2, 2)
B <-  c(2, 4, 2, 2, 2, 3, 2, 3, 2, 3, 2)

【讨论】:

  • 它似乎对你有用,但就我而言,我没有得到 1。
  • 我的第二行输出只有零:'0 0 0 0 0 0 0 0 0 0 0 '
  • @FRV 我发布了使用的数据。复制/粘贴该数据并检查代码是否有效
  • 对不起!你是绝对正确的!非常感谢您的帮助!
  • @FRV 没问题也许你使用了不同的数据集
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多