【发布时间】:2020-08-19 00:25:00
【问题描述】:
给定一个随机整数向量如下:
z <- c(3, 2, 4, 2, 1)
我想创建一个包含所有 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
必须有一个简单的方法来做到这一点。
【问题讨论】:
您可以使用rep 和seq根据同一向量的值重复该向量的索引。 seq 获取索引,rep 重复它们。
rep(seq(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
两种选择都给出相同的结果。
【讨论】: