如何将列表翻出来?

jak*_*kes 8 r base purrr

我有以下列表:

> list(c(3, 4, 5, 8), c(2, 6, 9, 10), c(1, 7))
[[1]]
[1] 3 4 5 8

[[2]]
[1]  2  6  9 10

[[3]]
[1] 1 7
Run Code Online (Sandbox Code Playgroud)

所以我们可以说3属于组1,6属于组2,7属于组3,依此类推.我需要一个反向映射,即对于我希望拥有它所属的组ID的每个数字(参见预期输出):

> list(3, 2, 1, 1, 1, 2, 3, 1, 2, 2)
[[1]]
[1] 3

[[2]]
[1] 2

[[3]]
[1] 1

[[4]]
[1] 1

[[5]]
[1] 1

[[6]]
[1] 2

[[7]]
[1] 3

[[8]]
[1] 1

[[9]]
[1] 2

[[10]]
[1] 2
Run Code Online (Sandbox Code Playgroud)

我认为purrr::transpose应该做的工作,但它并不完全符合我的意图,是吗?怎么做到呢?

PS.最终,我只需要一个形式的矢量:3 2 1 1 1 2 3 1 2 2但是我认为unlist()已经足够转换.

Kha*_*nes 3

这是一个基本解决方案...

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

rep(1:length(list), sapply(list, length))[order(unlist(list))]
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案,您可以使用“rep(seq_along(l), lengths(l))[order(unlist(l))]”完全矢量化它(不确定您使用“as.numeric”做什么)。 (3认同)
  • 关于“列表从内到外转换并不能完全回答我的主要问题”,我认为您需要澄清您的问题。您描述和呈现所需结果的方式似乎您只是想获取每个值的列表索引(此答案和其他答案实现)。我看不到“由内而外”的部分;) (2认同)