我有一个data.frames列表如下所示:
$IB1Q
V1 V2 V3 V4 V5 V6 V7 V8
0.184011746 0.805070251 0.840738769 0.701748191 0.493042421 0.889981450 0.003934755 0.794561335
V9 V10 V11
0.664718057 0.880357401 0.545795252
$IBCA
V1 V2 V3 V4 V5 V6 V7 V8 V9
0.8719393 0.8177656 0.9205127 0.7200678 0.7456413 0.4643883 0.8006192 0.1430972 0.7622733
V10 V11
0.4716331 0.8681162
并且每个元素名称(IB1Q,IBCA)传达信息。我想row.bind他们在一起,在我的data.farme我想要一个 列表的变量elemnt每个观察源自。 所以我想获得一个包含2列的data.frame(第一列popID和第二列我的比例):
IB1Q 0.184011746
IB1Q 0.805070251
IB1Q 0.840738769
IB1Q 0.701748191
IB1Q 0.493042421
.
.
.
IBCA 0.4716331
IBCA 0.8681162
答案 0 :(得分:1)
以下是一个想法:
mylist <- list(
IB1Q = as.data.frame(setNames(
list(0.184011746, 0.805070251, 0.840738769, 0.701748191, 0.493042421, 0.889981450, 0.003934755, 0.794561335, 0.664718057, 0.880357401, 0.545795252),
paste0("V", 1:11)
)),
IBCA = as.data.frame(setNames(
list(0.8719393, 0.8177656, 0.9205127, 0.7200678, 0.7456413, 0.4643883, 0.8006192, 0.1430972, 0.7622733, 0.4716331, 0.8681162),
paste0("V", 1:11)
))
)
do.call(rbind.data.frame,
lapply(names(mylist), function(n) data.frame(K=n, V=unlist(mylist[[n]], use.names = FALSE)))
)
# K V
# 1 IB1Q 0.184011746
# 2 IB1Q 0.805070251
# 3 IB1Q 0.840738769
# 4 IB1Q 0.701748191
# 5 IB1Q 0.493042421
# 6 IB1Q 0.889981450
# 7 IB1Q 0.003934755
# 8 IB1Q 0.794561335
# 9 IB1Q 0.664718057
# 10 IB1Q 0.880357401
# 11 IB1Q 0.545795252
# 12 IBCA 0.871939300
# 13 IBCA 0.817765600
# 14 IBCA 0.920512700
# 15 IBCA 0.720067800
# 16 IBCA 0.745641300
# 17 IBCA 0.464388300
# 18 IBCA 0.800619200
# 19 IBCA 0.143097200
# 20 IBCA 0.762273300
# 21 IBCA 0.471633100
# 22 IBCA 0.868116200
由于我们要废弃嵌套data.frame
的列名,因此我不认为使用unlist
过于苛刻/有损。 (我使用use.names=FALSE
,因为从长远来看,我发现行名称不可靠......如果您愿意,请随时保留它们。)
答案 1 :(得分:1)
这里不需要循环。您可以使用rep()
和unlist()
。
data.frame(
popID = rep(names(mylist), lengths(mylist)),
prop = unlist(mylist, use.names=FALSE) # use.names=FALSE for speed
)
lengths()
在这里非常有用,因为它为每个列表元素提供了列数。
答案 2 :(得分:0)
这是另一种方法(使用@ r2evans回答中提供的mylist
):
library(tidyverse)
bind_rows(mylist, .id = "popID") %>%
gather(key, value, -popID) %>% select(-key) %>% arrange(popID)
#> popID value
#> 1 IB1Q 0.184011746
#> 2 IB1Q 0.805070251
#> 3 IB1Q 0.840738769
#> 4 IB1Q 0.701748191
#> 5 IB1Q 0.493042421
#> 6 IB1Q 0.889981450
#> 7 IB1Q 0.003934755
#> 8 IB1Q 0.794561335
#> 9 IB1Q 0.664718057
#> 10 IB1Q 0.880357401
#> 11 IB1Q 0.545795252
#> 12 IBCA 0.871939300
#> 13 IBCA 0.817765600
#> 14 IBCA 0.920512700
#> 15 IBCA 0.720067800
#> 16 IBCA 0.745641300
#> 17 IBCA 0.464388300
#> 18 IBCA 0.800619200
#> 19 IBCA 0.143097200
#> 20 IBCA 0.762273300
#> 21 IBCA 0.471633100
#> 22 IBCA 0.868116200