合并列表的数据框并获取数据框的名称作为列
Merge dataframes of list and obtain names of dataframes as column
我将列表中的所有数据框合并到一个数据框中。
列表中的数据帧被调用
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
我该怎么做?
您可以在通过 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)
行名不能重复。所以最好的办法是将行名转换为列,然后使用 gsub 删除 .[0-9],即
df <- do.call(rbind, your_list)
df$list_id <- gsub('\..*', '', rownames(df))
请注意,您可以使用 dplyr
或 data.table
版本的 rbinding 列表,它可以选择将列表名称作为列包含在内,即
dplyr::bind_rows(your_list, .id = 'list_id')
data.table::rbindlist(your_list, idcol = 'list_id')
我将列表中的所有数据框合并到一个数据框中。
列表中的数据帧被调用
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
我该怎么做?
您可以在通过 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)
行名不能重复。所以最好的办法是将行名转换为列,然后使用 gsub 删除 .[0-9],即
df <- do.call(rbind, your_list)
df$list_id <- gsub('\..*', '', rownames(df))
请注意,您可以使用 dplyr
或 data.table
版本的 rbinding 列表,它可以选择将列表名称作为列包含在内,即
dplyr::bind_rows(your_list, .id = 'list_id')
data.table::rbindlist(your_list, idcol = 'list_id')