通过特定列合并具有不同长度的多个表格

20 浏览
0 Comments

通过特定列合并具有不同长度的多个表格

可能是重复的问题:

同时合并列表中的多个数据框

示例data.frames:

 df1 = data.frame(id=c('1','73','2','10','43'),v1=c(1,2,3,4,5)) 
 df2 = data.frame(id=c('7','23','57','2','62','96'),v2=c(1,2,3,4,5,6)) 
 df3 = data.frame(id=c('23','62'),v3=c(1,2)) 

注意:id对于每个数据框都是唯一的。我希望结果矩阵如下所示:

1      1 NA NA 
2      3  4 NA 
7      NA 1 NA 
10     4 NA NA 
23     NA 2  1 
43     5 NA NA 
57     NA 3 NA 
62     NA 5  2 
73     2 NA NA 
96     NA 6 NA

在这种情况下,我只展示了3个数据集,实际上我至少有22个,所以最后我希望得到一个nx(22+1)的矩阵,其中n是所有22个数据集的id数量。

给定2个数据集,我需要在第一列中获取它们的ids,第二列和第三列填充值,如果不存在值,则输入NA

0
0 Comments

合并具有不同长度的多个表格的原因是它们具有共同的特定列,需要将它们合并成一个表格。解决此问题的方法是将这些表格放入一个列表中,并使用merge函数和Reduce函数进行合并。

以下是在R语言中使用mergeReduce函数合并表格的示例代码:

# 将表格放入列表中
df_list <- list(df1, df2, df3)
# 使用Reduce函数和merge函数合并表格
merged_df <- Reduce(function(x, y) merge(x, y, all=TRUE), df_list)

上述代码将列表中的表格依次合并,使用all=TRUE参数表示保留所有的行,即使在某个表格中没有匹配的值。合并后的结果将保存在merged_df中。

除了上述方法,还可以使用更简洁的方式来合并表格:

merged_df <- Reduce(function(...) merge(..., all=TRUE), df_list)

该方法将使用...表示不定数量的参数,将所有的表格合并成一个。

如果需要考虑到不同表格之间的不同的id列,最简单的方法是将id列的名称统一。如果使用Reduce函数处理这种情况会显得有点复杂,因此可以考虑使用merge_recursemerge_all函数来构建一个更方便的方法。

如果在合并过程中遇到性能问题,可以尝试使用dplyr包中的连接函数,它们通常执行更快。另外,如果遇到内存不足的情况,可以参考CRAN任务视图中关于高性能计算的部分,了解有关大内存和超出内存数据处理的方法。

如果其中一个表格为空,可以先进行过滤操作,将其排除在合并的过程之外。

如果在合并过程中遇到by=0的警告,表示"Row.name"列存在重复。解决方法是将行名移动到一个新的列中,并在合并时使用by="rownames"参数。

如果多个表格具有相同列名(不计算匹配列),想要使用merge.data.table函数的suffixes参数时,可以参考文中提到的方法,将行名移动到一个新的列中,并在合并时使用by="rownames"参数。

以上是关于如何通过特定列合并具有不同长度的多个表格的原因和解决方法的说明。

0