在循环中根据行名合并列表数据

merge the list data based on rownames in a loop

我正在尝试将数据合并到一个列表中,但我发现它们的长度并不完全相同。有的长65有的长66.

datalist_BAL 是我的数据列表,datalist_BAL_name 是列表的名称。我尝试用行名创建另一个列表 BAL 并根据行名合并到 BAL_data 中。下面是我的代码。

BAL <-list()
BAL_data<-data.frame()
    
for(i in 1:length(datalist_BAL)){
dt<- t(datalist_BAL[[i]])
rownames(dt)<-t(datalist_BAL_name[[i]])
BAL[[i]] <- dt
if (i==1) {next()}
BAL_data<-merge(BAL[[i-1]],BAL[[i]],by = "row.names",all= TRUE)

}

我成功生成了BAL_data,但它只包含两列。

所以我想知道如何 运行 一个循环来合并列表的所有数据。提前致谢!

这就是我要做的。我认为问题在于您只使用 2 个数据框进行合并,这就是为什么您只有两列的原因。您也可以考虑更改列名。

datalist_BAL <- list(data.table(text=c('a', 'b'), merge_col=c('1', '2')), 
data.table(text=c('c', 'd'), merge_col=c('1', '2')),
                 data.table(text=c('e', 'f'), merge_col=c('1', '2')))


BAL <-list()
BAL_data<-data.frame()

for(i in 1:length(datalist_BAL)){
  dt<- datalist_BAL[[i]]
  if (i==1) {
  BAL_data <- dt
next()}
BAL_data<-merge(BAL_data,dt,by = "merge_col",all= TRUE)

}

这意味着您的代码将像这样更改

BAL <-list()
BAL_data<-data.frame()

for(i in 1:length(datalist_BAL)){
dt<- t(datalist_BAL[[i]])
rownames(dt)<-t(datalist_BAL_name[[i]])
BAL[[i]] <- dt
if (i==1) {
BAL_data <- dt
next()}
BAL_data<-merge(BAL_data,BAL[[i]],by = "row.names",all= TRUE)

}