我想将列表中的元素放入数据框。列表具有以下形状:
$`1`
SW GHS GS
0.49075730 0.46511628 0.02564103
...
$`95`
GHS SW LLB GS
0.06896552 0.03448276 0.03448276 0.00000000
$`96`
GHS SW TD
0.40736411 0.42843691 0.09003831
如您所见,向量的元素并不总是顺序相同的,它们的数目也是可变的。 我希望将其放在这样的数据框中:
GHS SW TD GS LLB
1 0.46511628 0.49075730 NA 0.02564103 NA
2 0.06896552 0.03448276 NA 0.00000000 0.03448276
3 0.40736411 0.42843691 0.09003831 NA NA
希望您能为我提供帮助,我一直在寻找类似的问题,但到目前为止,只能找到向量中元素的数量和顺序一致的情况...
答案 0 :(得分:1)
我们还可以在purrr::full_join
内使用purrr::reduce
# Reproducible sample data
set.seed(2018)
lst <- list(
`1` = setNames(as.data.frame(matrix(runif(3), ncol = 3)), c("SW", "GHS", "GS")),
`95` = setNames(as.data.frame(matrix(runif(4), ncol = 4)), c("GHS", "SW", "LLB", "GS")),
`96` = setNames(as.data.frame(matrix(runif(3), ncol = 3)), c("GHS", "SW", "TD")))
# Merge
library(purrr)
reduce(lst, full_join)
# SW GHS GS LLB TD
#1 0.3361535 0.4637233 0.06058539 NA NA
#2 0.4743142 0.1974336 0.60675886 0.3010486 NA
#3 0.9586547 0.1300121 NA NA 0.5468495
答案 1 :(得分:0)
下面的解决方案(1)将每个列表元素转换为数据框,其中 t()
用于获取元素名称作为数据框中的列名称,以及(2)对这些元素进行行绑定数据帧在一起,其中data.table的 fill
参数有助于矢量长度/名称不一致。
mylist <-list(
一个= c(SW = 0.49,GHS = 0.46,GS = 0.03),
两个= c(GHS = 0.07,GW = 0.03,LLW = 0.03,GS = 0.00),
六个= c(GHS = 0.41,SW = 0.42,TD = 0.09)
)
temp <-lapply(mylist,function(x)data.frame(t(x)))
data.table :: rbindlist(temp,fill = TRUE)
输出:
SW GHS GS GW LLW TD
1:0.49 0.46 0.03不适用不适用不适用
2:不适用0.07 0.00 0.03 0.03不适用
3:0.42 0.41不适用不适用0.09