顺序删除向量元素

时间:2018-01-27 17:58:01

标签: r vector seq

我想复制一个载体,该载体中的一个值缺失(顺序)。

例如,我的矢量是

value <- 1:7

首先,系列没有1,第二个没有2,依此类推。最后,该系列在一个向量中。

预期输出类似于

2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5 6

有没有聪明的方法可以做到这一点?

4 个答案:

答案 0 :(得分:3)

您可以使用对角矩阵来设置逻辑向量,使用它来删除适当的值。

n <- 7

rep(1:n, n)[!diag(n)]
#  [1] 2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5
# [36] 7 1 2 3 4 5 6

答案 1 :(得分:2)

嗯,你当然可以做一个单行,但我不确定它是否合格。例如:

x <- 1:7
do.call("c", lapply(as.list(-1:-length(x)), function(a)x[a]))

这个简单的方法使用lapply创建x的副本列表,删除每个条目,然后使用c连接它们。 do.call函数将其第一个参数(函数)应用于其第二个参数(函数的参数列表)。

答案 2 :(得分:0)

为了好玩,也可以使用rep

> n <- 7
> rep(1:n, n)[rep(c(FALSE, rep(TRUE, n)), length.out=n^2)]
[1] 2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5 7 1 2
[39] 3 4 5 6

但我认为lapply更清洁。

答案 3 :(得分:0)

你也可以这样做:

n <- 7
rep(seq(n), n)[-seq(1,n*n,n+1)]

#[1] 2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5 7 1 2 3 4 5 6