簡體   English   中英

如何“轉置”向量列表?

[英]How to "transpose" a list of vectors?

我有一個向量列表:

asdf = list(c(1, 2, 3, 4, 5), c(10, 20, 30, 40, 50))

現在我想“轉置”它,即獲得一個 5 對的列表,而不是 5 對的列表。

更具體地說,我希望結果類似於鍵入的結果:

transposedAsdf = list(c(1, 10), c(2, 20), c(3, 30), c(4, 40), c(5, 50))

但我不知道如何實現這一點。 如何?

transposedAsdf = as.list(as.data.frame(t(as.data.frame(asdf))))
transposedAsdf
$V1
[1]  1 10

$V2
[1]  2 20

$V3
[1]  3 30

$V4
[1]  4 40

$V5
[1]  5 50

使用data.table的選項

data.table::transpose(asdf)
#[[1]]
#[1]  1 10

#[[2]]
#[1]  2 20

#[[3]]
#[1]  3 30

#[[4]]
#[1]  4 40

#[[5]]
#[1]  5 50 

使用purrr包的解決方案。

library(purrr)

asdf2 <- transpose(asdf) %>% map(unlist)
asdf2
# [[1]]
# [1]  1 10
# 
# [[2]]
# [1]  2 20
# 
# [[3]]
# [1]  3 30
# 
# [[4]]
# [1]  4 40
# 
# [[5]]
# [1]  5 50

這是一種方式:

split(do.call(cbind, asdf), 1:length(asdf[[1]]))
# $`1`
# [1]  1 10
# 
# $`2`
# [1]  2 20
# 
# $`3`
# [1]  3 30
# 
# $`4`
# [1]  4 40
# 
# $`5`
# [1]  5 50

base RMap一個選項

do.call(Map, c(f = c, asdf))

collapse具有用於“高效列表轉置”的t_list

collapse::t_list(asdf)
# $V1
# [1]  1 10
#
# $V2
# [1]  2 20
#
# $V3
# [1]  3 30
#
# $V4
# [1]  4 40
# 
# $V5
# [1]  5 50

使用sapplyasplit

asplit(sapply(asdf, `[`, 1:5), 1)
[[1]]
[1]  1 10

[[2]]
[1]  2 20

[[3]]
[1]  3 30

[[4]]
[1]  4 40

[[5]]
[1]  5 50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM