当前位置: 首页 > 知识库问答 >
问题:

从向量中删除向量元素

尉迟墨竹
2023-03-14

这应该很容易,但我一直在撞我的头。

我有数字向量v1

v1 <- c(1,1,3,5,7,7)

我有一个数值向量v2。v2始终是v1的子集。
我想从v1中删除v2中的所有元素,但每个v2元素只删除一个(而且完全是一个)v1元素。

所需输出

如果v2<-c(3,5)我希望将c(1,1,7,7)保留在v1之外。使用v1[-match(v2,v1)]很容易。
如果v2<-c(1,7)我希望将c(1,3,5,7)与v1保持一致。此外,v1[-match(v2,v1)]也能起到作用。
如果v2<-c(1,1)我希望将c(3,5,7,7)与v1保持一致。现在v1[-match(v2,v1)]返回[1]1 3 5 7 7。不是我想要的。

当答案输入时,我很可能会用头撞我的键盘,但现在我还没有得到最小的想法。

共有2个答案

白赞
2023-03-14

使用真正的递归函数可能有更好的方法,但我认为您可以通过for循环来实现:

v1 <- c(1, 1, 3, 5, 7, 7)
v2 <- c(1,1)
v1_keep <- v1

for (i in seq_along(v2)){
  v1_keep <- v1_keep[-match(v2[i], v1_keep)]
}

v1_keep
# [1] 3 5 7 7
谈渊
2023-03-14

您可以使用“vecsets”库中的vsetdiff(这将保留重复项,而不是setdiff),方法如下:

library(vecsets)
v1 <- c(1,1,3,5,7,7)
v2.1 <- c(3,5)
> vsetdiff(v1, v2.1)
[1] 1 1 7 7
v2.2 <- c(1,7)
> vsetdiff(v1, v2.2)
[1] 1 3 5 7
v2.3 <- c(1,1)
> vsetdiff(v1, v2.3)
[1] 3 5 7 7
 类似资料:
  • 我想从包含每个组中元素数量的向量创建一个包含每个元素的组标识符的向量。 例子: 我正在寻找一个向量如下: 我找到了一个涉及循环的解决方案: 但这看起来不太优雅。欢迎提出任何改进建议。

  • 在本例中不会窃取返回变量。有没有办法避免多余的副本? 这就是结果: 基于建议的新代码(不知道是否一直在同一个线程上询问,不知道这是否是我所期望的,我所做的这一切都是为了减少代码): 看到它在行动中的新结果

  • 我目前正试图通过改变算法来优化一些MATLAB/Octave代码,但不知道如何处理一些随机性。假设我有一个整数向量V,每个元素代表一些东西的计数,在我的例子中是光子。现在,我想随机选取一些“东西”,创建一个大小相同的新向量,但要调整计数。 以下是我目前的做法: 这是上面描述的一个相当简单的实现。但是它有一个明显的性能缺陷:函数创建一个向量(idxV),每个光子包含一个元素。所以如果我的V只有100

  • 我试图将元组向量转换为向量[人],但上面的代码会导致强制转换异常,即使存在隐式的元组-人转换函数? 线程“main”java中出现异常。lang.ClassCastException:scala。Tuple2无法转换为示例。例如,测试$人。测试$$anonfun$2$$anonfun$应用$1。在scala应用(测试scala:19)。收集迭代器$类。scala上的foreach(迭代器。scal

  • 下面的代码为什么编译? std::move的文档说 执行此操作后,“移动自”范围中的元素仍将包含适当类型的有效值,但不一定与移动前的值相同。 所以这实际上可以改变对象foo2,即使它声明为const。为什么这样做有效?

  • 矢量或者说向量,可以通过2~4个分量表示一个向量,比如通过vec3(1,0,0)表示三维空间中一个沿着x轴正方向的三维方向向量,如果你有高中数学的基础,应该对向量有一定的了解,对于三维坐标的相关几何运算也有一定的概念。 关键字 数据类型 vec2 二维向量,具有xy两个分量,分量是浮点数 vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec4 四维向量 ,具有xyzw四个分量,分量是浮点