Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于另一个向量删除向量项_R - Fatal编程技术网

R 基于另一个向量删除向量项

R 基于另一个向量删除向量项,r,R,我有两个向量 a <- c(1:20) b <- c(2,11,14) a您可以简单地索引到a并删除b中索引处的元素,如下所示: a <- c(1:20) b <- c(2,11,14) a[-b] [1] 1 3 4 5 6 7 8 9 10 12 13 15 16 17 18 19 20 @Gopala的方法在大多数情况下都有效,除非“b”向量为空。为了使它更一般化,我们可以使用seq\u以及(a)和%in% a[!seq_along(a) %i

我有两个向量

a <- c(1:20)
b <- c(2,11,14)

a您可以简单地索引到
a
并删除
b
中索引处的元素,如下所示:

a <- c(1:20)
b <- c(2,11,14)
a[-b]
 [1]  1  3  4  5  6  7  8  9 10 12 13 15 16 17 18 19 20

@Gopala的方法在大多数情况下都有效,除非“b”向量为空。为了使它更一般化,我们可以使用
seq\u以及(a)
%in%

a[!seq_along(a) %in% b]
#[1]  1  3  4  5  6  7  8  9 10 12 13 15 16 17 18 19 20
现在,如果我们把“b”改为

b <- vector('integer')
a[-b]
#integer(0)
a[!seq_along(a) %in% b]
#[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
@thelatemail发布的使第一种方法通用的方法

system.time(a[if(length(b)==0) TRUE else -b])
# user  system elapsed 
#  0.05    0.00    0.05 

注:来自@Gopala帖子的基准数据。

关于
a[-b]
的情况如何?这就是你想要的吗?我对R比较陌生,所以我还不太清楚其中的细微差别。此外,该解决方案将应用于长度为310万的向量,因为我正在处理一个原始文本文件。您可以尝试一下……除了我上面提供的方法之外,不知道还有什么更好的方法可以做到这一点。谢谢@Gopala,做到了。我想得太多了。如果你发布一个解决方案,我会投票表决。或者只检查它是否为空
a[If(length(b)==0)TRUE-else-b]
a[!seq_along(a) %in% b]
#[1]  1  3  4  5  6  7  8  9 10 12 13 15 16 17 18 19 20
b <- vector('integer')
a[-b]
#integer(0)
a[!seq_along(a) %in% b]
#[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
system.time(a[-b])
# user  system elapsed 
#  0.07    0.00    0.08 
system.time(a[!seq_along(a) %in% b])
#  user  system elapsed 
#  0.17    0.01    0.18 
system.time(a[if(length(b)==0) TRUE else -b])
# user  system elapsed 
#  0.05    0.00    0.05