[英]how to convert a list to a data.frame in R?
我有一个带有行名(sample-01)和 1 列(elem1)的 data.frames 列表,如果我想生成一个包含具有相同行数的 data.frames 的列表的 data.frame,它将是简单的
do.call(cbind, mylist)
elem1 elem2 elem3
sample-01 E7 E1 E1
sample-02 E7 E1 E1
sample-03 E4 E8 E8
sample-04 E8 E3 E2
sample-05 E9 E3 E2
sample-06 E8 E3 E2
sample-07 E5 E6 E7
sample-08 E8 E3 E2
但如果我有不同的行数,
mylist
$elem1
elem1
sample-01 E7
sample-02 E7
sample-03 E4
sample-04 E8
sample-05 E9
sample-06 E8
$elem2
elem2
sample-01 E1
sample-02 E1
sample-03 E8
sample-04 E3
$elem3
elem3
sample-05 E2
sample-06 E2
sample-07 E7
sample-08 E2
如何生成 data.frame,在这种情况下使用所有 row.names 将从 sample-01 到 sample-08,如果不存在,列将填充 NA? 就像是:
elem1 elem2 elem3
sample-01 E7 E1 NA
sample-02 E7 E1 NA
sample-03 E4 E8 NA
sample-04 E8 E3 NA
sample-05 E9 NA E2
sample-06 E8 NA E2
sample-07 NA NA E7
sample-08 NA NA E2
非常感谢 !!!
带有一些后处理的dplyr::bind_rows()
是一个tidy
解决方案的示例:
df_list %>%
map(rownames_to_column, "sample") %>%
bind_rows() %>%
group_by(sample) %>%
summarise(across(everything(), ~first(na.omit(.))))
# # A tibble: 8 × 4
# sample elem1 elem2 elem3
# <chr> <chr> <chr> <chr>
# 1 sample-01 E7 E1 NA
# 2 sample-02 E7 E1 NA
# 3 sample-03 E4 E8 NA
# 4 sample-04 E8 E3 NA
# 5 sample-05 E9 NA E2
# 6 sample-06 E8 NA E2
# 7 sample-07 NA NA E7
# 8 sample-08 NA NA E2
数据:
df_list <- list(elem1 = read.table(text = " elem1
sample-01 E7
sample-02 E7
sample-03 E4
sample-04 E8
sample-05 E9
sample-06 E8", header = TRUE),
elem2 = read.table(text = " elem2
sample-01 E1
sample-02 E1
sample-03 E8
sample-04 E3", header = TRUE),
elem3 = read.table(text = " elem3
sample-05 E2
sample-06 E2
sample-07 E7
sample-08 E2", header = TRUE))
mylist %>%
map(rownames_to_column, "sample") %>%
reduce(full_join, "sample")
sample elem1 elem2 elem3
1 sample-01 E7 E1 <NA>
2 sample-02 E7 E1 <NA>
3 sample-03 E4 E8 <NA>
4 sample-04 E8 E3 <NA>
5 sample-05 E9 <NA> E2
6 sample-06 E8 <NA> E2
7 sample-07 <NA> <NA> E7
8 sample-08 <NA> <NA> E2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.