从R中的(1,2,3,4,2,3,4,4)中获取(1,2,3,4)

从R中的(1,2,3,4,2,3,4,4)中获取(1,2,3,4),r,rep,R,Rep,我有向量 z1 <- c(1, 2, 3, 4) z1编辑:更新post以说明有序解决方案 通过最大次数重复每个值来填充矩阵。然后取矩阵的下三角。注意:在这种情况下,使用length(z1)以便值必须是整数,如果该值有意义,则使用max(z1) z2 <- matrix(data = rep(z1, times = length(z1)), ncol = length(z1), byrow = FALSE) z2 使用lower.tri将矩阵子集,以提取下三角形和对角线 z2

我有向量

z1 <- c(1, 2, 3, 4) 

z1编辑:更新post以说明有序解决方案

通过最大次数重复每个值来填充矩阵。然后取矩阵的下三角。注意:在这种情况下,使用
length(z1)
以便值必须是整数,如果该值有意义,则使用
max(z1)

z2 <- matrix(data = rep(z1, times = length(z1)), ncol = length(z1), byrow = FALSE)
z2
使用
lower.tri
将矩阵子集,以提取下三角形和对角线

z2 <- z2[lower.tri(z2, diag = TRUE)]
print(z2)

以前的部分解决方案(对于无序解决方案)

使用
lappy
对向量进行迭代,每次迭代时,使用
rep
重复每个元素所需的次数,然后
unlist
将结果转换为向量

 z1 <- c(1, 2, 3, 4) 
 z2 <- unlist(lapply(z1, function(x) rep(x, times = x)))
 print(z2)

您可以尝试
sapply
+
unlist
+
tail
如下所示

> unlist(sapply(-seq_along(z1), tail, x = c(NA, z1)))
 [1] 1 2 3 4 2 3 4 3 4 4

使用eval解析的基本R:

z1 <- c(1, 2, 3, 4) 
max_num <- max(z1)
unlist(lapply(paste(z1, max_num, sep = ":"), function(x){
      eval(parse(text=x))
    }
  )
)

z1可能
unlist(sappy(1:length(z1),function(i)z1[i:length(z1)])
一个小小的变化:
unlist(sappy(seq_-along(z1),function(i)z1[seq_-along(z1)>=i])
我想用任何向量从z1生成类似于z2的序列,因此,z1的元素可以是浮点数,而不是排序。带有
rep
的选项将是
n,我确实忽略了这一点。我会复习的,但是为什么呢
eval(parse())
是一种非常容易出现错误的方法。
z2 <- z2[lower.tri(z2, diag = TRUE)]
print(z2)
[1] 1 2 3 4 2 3 4 3 4 4
 z1 <- c(1, 2, 3, 4) 
 z2 <- unlist(lapply(z1, function(x) rep(x, times = x)))
 print(z2)
 [1] 1 2 2 3 3 3 4 4 4 4
c(z1, unlist(lapply(1:length(z1), function(x) z1[-c(1:x)])))
[1] 1 2 3 4 2 3 4 3 4 4
> unlist(sapply(-seq_along(z1), tail, x = c(NA, z1)))
 [1] 1 2 3 4 2 3 4 3 4 4
z1 <- c(1, 2, 3, 4) 
max_num <- max(z1)
unlist(lapply(paste(z1, max_num, sep = ":"), function(x){
      eval(parse(text=x))
    }
  )
)