如何根据同一向量的值重复向量的索引?
How to repeat the indices of a vector based on the values of that same vector?
给定以下随机整数向量:
z <- c(3, 2, 4, 2, 1)
我想创建一个新向量,其中包含所有 z 的索引,多次由对应于 z 元素的值指定。为了说明这一点。在这种情况下,期望的结果应该是:
[1] 1 1 1 2 2 3 3 3 3 4 4 5
必须有一个简单的方法来做到这一点。
从向量 z 的所有索引开始。这些由:
1:length(z)
那么应该重复这些元素。这些数字应重复的次数由 z 的值指定。这可以使用 lapply
或 sapply
函数和 rep
函数的组合来完成:
unlist(lapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5
unlist(sapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5
两种选择的结果相同。
您可以使用 rep
和 seq
根据同一向量 的值重复向量的索引。 seq
获得 指数 和 rep
重复 它们。
rep(seq(z), z)
# [1] 1 1 1 2 2 3 3 3 3 4 4 5
给定以下随机整数向量:
z <- c(3, 2, 4, 2, 1)
我想创建一个新向量,其中包含所有 z 的索引,多次由对应于 z 元素的值指定。为了说明这一点。在这种情况下,期望的结果应该是:
[1] 1 1 1 2 2 3 3 3 3 4 4 5
必须有一个简单的方法来做到这一点。
从向量 z 的所有索引开始。这些由:
1:length(z)
那么应该重复这些元素。这些数字应重复的次数由 z 的值指定。这可以使用 lapply
或 sapply
函数和 rep
函数的组合来完成:
unlist(lapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5
unlist(sapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5
两种选择的结果相同。
您可以使用 rep
和 seq
根据同一向量 的值重复向量的索引。 seq
获得 指数 和 rep
重复 它们。
rep(seq(z), z)
# [1] 1 1 1 2 2 3 3 3 3 4 4 5