我将列表中的所有数据帧合并到一个数据帧中。
列表中的数据框称为
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
我该怎么做?
答案 0 :(得分:2)
您不能重复的名字。因此,最好的办法是将行名转换为列,然后使用gsub删除。[0-9],即
df <- do.call(rbind, your_list)
df$list_id <- gsub('\\..*', '', rownames(df))
请注意,您可以使用dplyr
或data.table
版本的绑定列表,可以选择将列表名称作为列,即
dplyr::bind_rows(your_list, .id = 'list_id')
data.table::rbindlist(your_list, idcol = 'list_id')
答案 1 :(得分:0)
通过do.call
合并三个列表后,您可以添加带有列表名称的其他列:
nameColumn <- data.frame(listName = c(rep(c('TAI','NAM','HEE'),
c(length(TAI),length(NAM),length(HEE) ))
meanall <- cbind(meanall, nameColumn)
如果您希望nameColumn
成为第一列,只需将cbind
中的参数切换为
meanall <- cbind(nameColumn, meanall)