繁体   English   中英

如何将列表转换为 R 中的 data.frame?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM