顺序删除向量元素

3

我希望能够复制一个向量,其中一个值在该向量中丢失(顺序排列)。

例如,我的向量是

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个回答

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

2

当然,你可以将其作为一行代码来完成,但我不确定它是否合格。例如:

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

这个简单的示例使用 lapply 创建一个列表,其中每个条目都删除了 x 的一个条目,并使用 c 连接它们。 do.call 函数将其第一个参数(一个函数)应用于其第二个参数(要传递给该函数的参数列表)。


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更加简洁。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接