首页 > 解决方案 > 合并列表的数据框并获取数据框的名称作为列

问题描述

我将列表中的所有数据框合并到一个数据框中。

列表中的数据框被称为

TAI
NAM
HEE 

每个数据框看起来像这样

Yr-M   Compound1 Compound 2
2015-01   0.002    0.15
2015-02   0.004    0.02
2015-03   0.01     0.09

当我合并所有数据框时,meanall<-do.call(rbind, meaneach) 我得到

         Yr-M  Compound1  Compound2
TAI.1   2015-01   0.002    0.15
TAI.2   2015-02   0.004    0.02
TAI.3   2015-03   0.01     0.09
  .
  .
  .
NAM.1   2015-01   0.03     0.4
NAM.2   2015-02   0.001    0.005

我想得到一个包含列表名称而不是行名(如上)的列,并且没有数字(TAI.1,TAI.2 ...),我只想要名称 TAI

所以我得到这个:

 List    Yr-M  Compound1  Compound2
  TAI   2015-01   0.002    0.15
  TAI   2015-02   0.004    0.02
  TAI   2015-03   0.01     0.09
  .
  .
  .
  NAM   2015-01   0.03     0.4
  NAM   2015-02   0.001    0.005

我怎样才能做到这一点?

标签: rlistrbind

解决方案


行名不能重复。所以最好的办法是将行名转换为列,然后使用 gsub 删除 .[0-9],即

df <- do.call(rbind, your_list)
df$list_id <- gsub('\\..*', '', rownames(df))

请注意,您可以使用dplyrdata.table版本的 rbinding 列表,该列表可以选择将列表名称包含为列,即

dplyr::bind_rows(your_list, .id = 'list_id')
data.table::rbindlist(your_list, idcol = 'list_id')

推荐阅读