R:基于列表创建向量

标签 r

我有一个名为 m1 的列表:

> m1
[[1]]
[1] 36 37 38

[[2]]
[1] 34 35

[[3]]
[1] 30 31 32 33

[[4]]
[1] 24 25 26 27 28 29

[[5]]
[1] 20 21 22 23

[[6]]
[1] 14 15 16 17 18 19

[[7]]
[1] 11 12 13

[[8]]
[1]  7  8  9 10

[[9]]
[1] 5 6

[[10]]
[1] 1 2 3 4

[[11]]
integer(0)

我想根据这个列表创建一个向量,它在位置 36、37 和 38 处的值为 1;位置 34 和 35 处的值 2 等。最终输出应为:

vector_1 <- c(10, 10, 10, 10, 9, 9, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1)

如何在 R 中完成此操作?

编辑:

感谢下面的评论:

> rep(length(m1):1, sapply(m1, length))
 [1] 11 11 11 10 10  9  9  9  9  8  8  8  8  8  8  7  7  7  7  6  6  6  6  6  6  5  5  5  4
[30]  4  4  4  3  3  2  2  2  2

这并不能完全满足我的需求,但它绝对是在正确的轨道上!

最佳答案

这应该处理空条目和非连续条目的情况......

m1 <- list(c(7,4,5), c(2,10,9), c(1,3,6,8), integer())
# [[1]]
# [1] 7 4 5
# 
# [[2]]
# [1]  2 10  9
# 
# [[3]]
# [1] 1 3 6 8
# 
# [[4]]
# integer(0)

rep(seq_along(m1), sapply(m1, length))[order(unlist(m1))]
#[1] 3 2 3 1 1 3 1 3 2 2

关于R:基于列表创建向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185203/

相关文章:

R:将分隔字符串转换为变量

r - 如何将二进制小数转换为 R 中的十进制小数?

r - 如何根据两列中的值给出的日期范围删除行?

删除 "_"之前的所有字符

r - 使用 R 中的 XBRL 包将财务报表组织成数据框

r - 如果填充了多个选项,则 selectInput 将不会触发(在 Shiny 中)

r - 如何在数据框上使用强制转换?

r - 在 R 中包含 zoo 包时出错

r - 小的 ggplot 对象 (1 mb) 保存后变成 7 GB 的 .Rdata 对象

R传单连续图例中的相反顺序