9

私は3つの独立していdata.framesます。3つdata.framesは、同じ数の列と同じ数の行を持っています。さらに、それらは同じ列名を持っています。列名に従って3つのdata.framesをマージしようとしています。2つのdata.framesをマージし、一致数を返すために記述された次のコードを使用しています。

Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, by=n)))

問題は、この例では2つのdata.framesがありますが、私の場合は3つのdata.framesがあることです。2つではなく3つのdata.framesをマージするようにコードを変更するにはどうすればよいですか?3番目のdata.frameを追加するだけで、この方法で文字列を変更しようとしましたが、機能しません。

  Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, DF3,  by=n)))

次のエラーが返されます。

 Error in fix.by(by.x, x) :  'by' must specify column(s) as numbers, names or logical

元:

DF1

 G1  G2  G3
  a   b   f
  b   c   a
  c   d   b

DF2

 G1  G2  G3
  A   b   f
  b   c   a
  h   M   b

DF3

 G1  G2  G3
  a   b   f
  b   l   a
  j   M   v

data.framesには、約250行と50列があります。

4

3 に答える 3

11

この関数を使用して、Reduce複数のデータフレームをマージできます。

df_list <- list(DF1, DF2, DF3)
Reduce(function(x, y) merge(x, y, all=TRUE), df_list, accumulate=FALSE)

またはパッケージmerge_recurseから:reshape

library(reshape)
data <- merge_recurse(df_list)

R Wiki:データフレームのマージも参照してください。

于 2013-03-08T10:32:21.767 に答える
3

今日、これとまったく同じ質問を数時間調査した後、「dplyr」パイプとベースR「merge()」関数の組み合わせを使用した、このシンプルでエレガントなソリューションを思いつきました。

MergedDF <- merge(DF1, DF2) %>%
              merge(DF3)

投稿で述べたように、これは列名が同じであり、マージする各データフレームに同じ数の行があることを前提としています。これにより、マージプロセスで使用された重複する列(つまり、識別子)も自動的に削除されます。

于 2019-07-07T00:55:04.923 に答える
0

同じ列名で行番号が異なる複数のデータフレームをマージしたい場合に備えて、この記事は役に立ちました:https ://medium.com/coinmonks/merging-multiple-dataframes-in-r-72629c4632a3

基本的に、do.call関数とrbind関数を使用します。

Merged <- do.call("rbind", list(df1, df2, df3, df4))
于 2021-01-18T08:34:42.710 に答える