【问题标题】:How to check whether a vector is subset of another one in R?如何检查一个向量是否是R中另一个向量的子集?
【发布时间】:2021-05-20 10:16:40
【问题描述】:

说,我有两个向量:

A <- c(1,0,0,1,0,0,0)

B <- c(1,0,0,1,0,1,1)

根据我的定义,A 是 B 的子集,(两个向量仅包含二进制值)当且仅当

  • AB 具有相同的长度,因此具有相同数量的元素;
  • A 应该有 01 在任何地方 B1
  • B0s 的所有地方,A 只能有0s。

现在我希望编写一个代码来验证以下内容中的某些内容

if(A subset of B){}

谢谢!

【问题讨论】:

  • A 的子集 B 到底是什么意思?例如,A 至少应该有多少个元素在B 中才能满足您的问题?
  • 如果A 只需要一个元素等于B 中的另一个元素在同一空间,那么我想这可以工作:sum(A == B) &gt; 1
  • @bird 1- A 和 B 应该具有相同的长度。 2- 元素是二元的 3- 向量 A 是 B 的子集当且仅当它在完全相同的位置与 B 具有相同或更少数量的 1。例如 A
  • @AnilGoyal 我不认为您对A should have either 0 or 1 at all places wherever B has 1 的问题的编辑是正确的。我认为它应该至少有一个匹配的 1。
  • @Carl 是A &lt;- c(0,0,0,0) 也是B &lt;- c(0,1,1,0) 的子集?

标签: r subset


【解决方案1】:

您可以测试length 是否为== 以及Aany 值是否在B 具有1 的位置上具有1并将条件与&amp;&amp;结合起来。

length(A) == length(B) && any(A[B==1]==1)
#[1] TRUE

满足原题中的条件:A 和 B 具有相同的长度,因此具有相同数量的元素;然而,A 是 B 的子集,因为 A 在与 B 相同的位置具有元素 1

实现:

  • AB 具有相同的长度,因此具有相同数量的元素;
  • A 应该至少有一个1B1 的地方
  • B0s 的所有地方,A 只能有0s。
length(A) == length(B) && any(A[B==1]==1) && all(A[B==0]==0)

实现:

  • AB 具有相同的长度,因此具有相同数量的元素;
  • B0s 的所有地方,A 只能有0s。
length(A) == length(B) && all(A[B==0]==0)

【讨论】:

  • 在我可以读到的问题中: 根据我的定义,A 和 B 具有相同的长度,因此具有相同数量的元素;然而,A 是 B 的子集,因为 A 在与 B 相同的位置有元素 1 作为条件,在这种情况下这是真的。
  • 哦,是的,我在评论中看到条件不同:向量 A 是 B 的子集当且仅当它具有与 B 完全相同或更少数量的 1地点.
【解决方案2】:

第一个条件检查相同的长度,第二个条件检查 A 在 B 有 0 的位置上没有 1。

if(length(A) == length(B) && all(B - A >= 0)) TRUE else FALSE

【讨论】:

  • 表示为if(A subset of B)
  • 它不测试 A 是否在与 B 相同的位置有元素 1,如原始问题中所问。试一试,例如A &lt;- 0; B &lt;- 0.
  • 这不是 OP 要求的
  • 除了最后两个元素
  • 这是你的理解,没有在任何地方说明(不是说错,我的理解不同)。
猜你喜欢
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2020-09-17
相关资源
最近更新 更多