从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))
}
)
)