1. ホーム
  2. r

2つのデータフレームを元の行順を維持したままマージする

2023-08-25 19:43:19

質問

2つのデータフレームを、片方のデータフレームの元の行の順番を保ったままマージしたいのですが ( df.2 のように)。

以下はサンプルデータです (すべての値は class 列のすべての値が両方のデータフレームで定義されています)。

df.1 <- data.frame(class = c(1, 2, 3), prob = c(0.5, 0.7, 0.3))
df.2 <- data.frame(object = c('A', 'B', 'D', 'F', 'C'), class = c(2, 1, 2, 3, 1))

もし私が

merge(df.2, df.1)

出力は

  class object prob
1     1      B  0.5
2     1      C  0.5
3     2      A  0.7
4     2      D  0.7
5     3      F  0.3

もし私が sort = FALSE :

merge(df.2, df.1, sort = F)                                                        

結果は

  class object prob
1     2      A  0.7
2     2      D  0.7
3     1      B  0.5
4     1      C  0.5
5     3      F  0.3

しかし、私が望むのは

  class object prob
1     2      A  0.7
2     1      B  0.5
3     2      D  0.7
4     3      F  0.3    
5     1      C  0.5

どのように解決するのですか?

plyrパッケージのjoin関数をチェックしてみてください。これはmergeに似ていますが、データセットの1つの行の順序を維持することができます。全体として、マージよりも柔軟性があります。

あなたの例のデータを使って、私たちは join のようにします。

> join(df.2,df.1)
Joining by: class
  object class prob
1      A     2  0.7
2      B     1  0.5
3      D     2  0.7
4      F     3  0.3
5      C     1  0.5

行の順序を維持するためのマージ機能の修正について説明したいくつかのリンクを紹介します。

http://www.r-statistics.com/2012/01/merging-two-data-frame-objects-while-preserving-the-rows-order/

http://r.789695.n4.nabble.com/patching-merge-to-allow-the-user-to-keep-the-order-of-one-of-the-two-data-frame-objects-merged-td4296561.html