異なる変数をキーとして使用するたびに、2つのデータセットを複数回左結合するにはどうすればよいですか?

トム

からすべての行を保持し、からX一致する行のみを保持する必要があるため、left_joinを使用して2つのデータフレームを結合していYます。ただし、完全に一致する列は1つではありません。代わりに、1つの列が存在するX部分に2列と一致するY、と第二列Xの一部に第3列と一致するがY3つすべてを一致させることによってのみ、データを適切にマージできます。これらはすべて、行のさまざまな組み合わせで一致するためです(一部重複しています)。

これまでの私の戦略はleft_join、それぞれが異なる一致を持つ3つの別々のコマンドを実行することでした。これを行うと、行の約95%を一致させることができます(最初の一致は約70%しか得られません)。ただし、これYにより、マージされたデータの各列の3つのバージョンが残ります。貼り付けや他のいくつかの方法を使用してそれらを組み合わせようとしましたが、機能しないか、新しい列が連結されているため役に立ちません(たとえば、「12345NA12345」または「NANANA」を表示)。NA以外の結果はすべて同じになるため、最初のNA以外の結果のみを表示する必要があります。したがって、上記の2つの例では、「12345」と「NA」のみを返します。

したがって、複数の列でleft_joinを実行する方法を理解する必要があると思います(これは機能しませんが、次のようなものです:

left_join(X, Y, by = (c("Column1" = Column1) OR c("Column1" = "Column2") OR c( Column 2, Y = "Column 3")).  

または、あまりエレガントではありませんが、最初の非NAの結果のみを保持するために、マージ/貼り付けされた列を再フォーマットする方法を理解する必要があります。

以下の例では、Xには2列と5行があり、Yには4列と7行があります(そのうち5つはXの行と一致します)。XとYを完全にマージする唯一の方法は、X $ Column1をY $ Column1またはY $ Column2と一致させるか、X $ Column2をY $ Column3と一致させることです。実際のデータでは周りの50,000の行があるXとの他の列のもたくさんXとはY)。以下からの望ましい出力は、Xからの5つの行(Yにも一致する)と、Y $ Column4の対応する値である必要があります。

X$Column1 = c(10, 150, 3550, 9421, 22000)
X$Column2 = c(Dog, Cat, Bird, Rat, Fox)
Y$Column1 = c(NA, 453, NA, NA, 3550, 9421, NA, 4200)
Y$Column2 = c(22, NA, 10, 150, 3550, NA, NA, 4200)
Y$Column3 = c(NA, Badger, Dog, NA, NA, NA, Fox, Mouse)
Y$Column4 = c(NA, 4500, 12345, 54, NA, 5555, 321, 65, 20)

上記から、3つの列(Xの3つの元の列とYの4番目の列)とともに5つの行(Xの各行に1つ)を返したいと思います。Yの他の3つの列は、照合にのみ役立ちます。上記の例のように、私のデータでは、3つの試合すべてに参加せずに、完全な(または完全に近い)試合を完了する方法はありません。私は何年もの間これを行う方法を探していましたが、私はRにまったく慣れていないので、愚かであるならば申し訳ありません。

現時点での私のコード:

merged_pvga <- left_join(merged_pvga, sherpa, by = c("issn1" = "issn_print"))
merged_pvga <- left_join(merged_pvga, sherpa, by = c("issn1" = "issn_electronic"))
merged_pvga <- left_join(merged_pvga, sherpa, by = (c("journal_title" = "title")))
merged_pvga$id_all <- paste(merged_pvga$id.x, merged_pvga$id.y, merged_pvga$id)
merged_pvga$subject_all <- paste(merged_pvga$subject.x, merged_pvga$subject.y, merged_pvga$subject)

他の列の場合など

KM_83

これは、変数変数の2回YX使用した左結合データの例ですXColumnAColumnB

注意:

  • Yそして、X2つの変数ColumnA共有しますColumnBこれにより、各左結合の後にColumnA、結合キーとして使用されない列を結合する必要があります(たとえば、結合した後ColumnB、2つのデータセットのを結合します)。
  • 2つの異なる変数で2回結合することによって発生する可能性のある重複の可能性について、実行したいことを必ず知っておいてください。以下の例では、最初の左結合を優先し、すでに結合されているものXは2番目の左結合で除外されます。
library(dplyr)

X = tibble(id_x=1:5)
Y = tibble(id_y=1:8)  
X$ColumnA = c(10, 150, 3550, 9421, 22000)
X$ColumnB = c('Dog', 'Cat', 'Bird', 'Rat', 'Fox')
Y$ColumnA = c(NA, 453, NA, NA, 3550, 9421, NA, 4200)
Y$Column2 = c(22, NA, 10, 150, 3550, NA, NA, 4200)
Y$ColumnB = c(NA, 'Badger', 'Dog', NA, NA, NA, 'Fox', 'Mouse')
Y$Column4 = c(NA, 4500, 12345, 54, NA, 5555, 321, 65)

replace_na_with_blank <- function(df, varnames) {
  for (varname in varnames) {
    df[is.na(df[[varname]]), varname] <- ""
  }
  return(df)
}

concat_columns <- function(df, v1, v2) {
  idx_na <- df[[v1]]==""
  df[[v1]][idx_na] <- paste(df[[v1]][idx_na], df[[v2]][idx_na], sep='') 
  df[[v2]] <- NULL
  return(df)
}

concat_columns_num <- function(df, v1, v2) {
  idx_na <- is.na(df[[v1]])
  df[[v1]][idx_na] <- df[[v2]][idx_na]
  df[[v2]] <- NULL
  return(df)
}

merged_1 <- left_join(Y, X, by = c("ColumnA" = "ColumnA"), suffix=c("",".x"))
merged_1 = replace_na_with_blank(merged_1, c("ColumnB","ColumnB.x"))
merged_1 <- concat_columns(merged_1, "ColumnB", "ColumnB.x")
merged_1 # first merge indicator is "id_x.x"

merged_2 <- left_join(merged_1, X %>% filter(!(id_x %in% merged_1$id_x)),
                      by = c("ColumnB" = "ColumnB"), suffix=c("",".x"))
merged_2 <- concat_columns_num(merged_2, "ColumnA", "ColumnA.x")
merged_2  # second merge indicator is "id_x.x.x"

merge1 です

merge1

merge2 です

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数を使用して 2 つの異なるデータ セットをプロットするにはどうすればよいですか?

分類Dev

ReactJSで2つの異なる状態変数を使用してデータを取得するにはどうすればよいですか?

分類Dev

Rで複数の変数にわたってテーブル関数を実行し、関数を使用して結果を新しいデータセットにコンパイルするにはどうすればよいですか?

分類Dev

日付が異なる2つのデータセットのデータを統合するにはどうすればよいですか?

分類Dev

R内の複数のデータセットを垂直に結合またはマージするにはどうすればよいですか

分類Dev

異なる引数/変数を使用してプレイブックで複数回呼び出すことができるタスクで構成される再利用可能な「関数」を作成するにはどうすればよいですか?

分類Dev

pydatatableでキー列名が異なる2つのデータフレームを結合するにはどうすればよいですか?

分類Dev

同じChartJSで異なるajax呼び出しからの異なるデータセットを表示するにはどうすればよいですか?

分類Dev

PHP Jasperを使用してXMLデータソースで複数のxpathデータセットを使用するにはどうすればよいですか?

分類Dev

OverlayFSを使用して複数のストレージを1つに「結合」するにはどうすればよいですか?これは可能ですか?

分類Dev

Codeigniterの異なるボタンを使用して、複数の画像とテキストファイルを1つのフォームにアップロードするにはどうすればよいですか?

分類Dev

複数の変数をマージして新しいデータセットを作成するにはどうすればよいですか?

分類Dev

複数のキーで2つのデータフレームを結合するにはどうすればよいですか?

分類Dev

2つの異なる構造を持つファイル2データセットにエクスポートするときに、欠落している値の空白を取り除くにはどうすればよいですか?

分類Dev

同じ構造を持たない複数のデータセットの列を合計するにはどうすればよいですか?

分類Dev

`dplyr`関数を使用して2つのデータフレームを順次結合するにはどうすればよいですか?

分類Dev

左結合を使用してマスターテーブルからすべてのデータを取得するにはどうすればよいですか?

分類Dev

結合するキーのコレクションとして列を持つデータセットと結合するにはどうすればよいですか?

分類Dev

PowershellのSSHキーを使用して2つの異なるGitHubアカウントにプッシュするにはどうすればよいですか?

分類Dev

パンダを使用して、ヘッダーが異なる複数のExcelファイルを1つのシートに結合するにはどうすればよいですか?

分類Dev

(Sparkスキュー結合)メモリの問題なしに、高度に複製されたキーを使用して2つの大きなSpark RDDを結合するにはどうすればよいですか?

分類Dev

2つのリストを結合するときに重複するキーを処理するにはどうすればよいですか?

分類Dev

2つの2つの要素データセット間で異なるオブジェクトを取得するにはどうすればよいですか?

分類Dev

データセットを複数のデータセットに分割した後、計算を実行するにはどうすればよいですか?

分類Dev

1つのpytorchnnの2つのデータセットに対して2つの損失を使用するにはどうすればよいですか?

分類Dev

Pythonを使用して、データの複数の列をそれぞれの行に結合するにはどうすればよいですか?

分類Dev

長さが異なるインデックスとして配列を使用して、パンダデータフレームで一度に複数の値を変更するにはどうすればよいですか?

分類Dev

異なるモジュールによって依存関係として使用されるときに、同じnode.jsパッケージが複数回インストールされるのを回避するにはどうすればよいですか?

分類Dev

2つのテーブルで内部結合を使用した後に複数の行を追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    関数を使用して 2 つの異なるデータ セットをプロットするにはどうすればよいですか?

  2. 2

    ReactJSで2つの異なる状態変数を使用してデータを取得するにはどうすればよいですか?

  3. 3

    Rで複数の変数にわたってテーブル関数を実行し、関数を使用して結果を新しいデータセットにコンパイルするにはどうすればよいですか?

  4. 4

    日付が異なる2つのデータセットのデータを統合するにはどうすればよいですか?

  5. 5

    R内の複数のデータセットを垂直に結合またはマージするにはどうすればよいですか

  6. 6

    異なる引数/変数を使用してプレイブックで複数回呼び出すことができるタスクで構成される再利用可能な「関数」を作成するにはどうすればよいですか?

  7. 7

    pydatatableでキー列名が異なる2つのデータフレームを結合するにはどうすればよいですか?

  8. 8

    同じChartJSで異なるajax呼び出しからの異なるデータセットを表示するにはどうすればよいですか?

  9. 9

    PHP Jasperを使用してXMLデータソースで複数のxpathデータセットを使用するにはどうすればよいですか?

  10. 10

    OverlayFSを使用して複数のストレージを1つに「結合」するにはどうすればよいですか?これは可能ですか?

  11. 11

    Codeigniterの異なるボタンを使用して、複数の画像とテキストファイルを1つのフォームにアップロードするにはどうすればよいですか?

  12. 12

    複数の変数をマージして新しいデータセットを作成するにはどうすればよいですか?

  13. 13

    複数のキーで2つのデータフレームを結合するにはどうすればよいですか?

  14. 14

    2つの異なる構造を持つファイル2データセットにエクスポートするときに、欠落している値の空白を取り除くにはどうすればよいですか?

  15. 15

    同じ構造を持たない複数のデータセットの列を合計するにはどうすればよいですか?

  16. 16

    `dplyr`関数を使用して2つのデータフレームを順次結合するにはどうすればよいですか?

  17. 17

    左結合を使用してマスターテーブルからすべてのデータを取得するにはどうすればよいですか?

  18. 18

    結合するキーのコレクションとして列を持つデータセットと結合するにはどうすればよいですか?

  19. 19

    PowershellのSSHキーを使用して2つの異なるGitHubアカウントにプッシュするにはどうすればよいですか?

  20. 20

    パンダを使用して、ヘッダーが異なる複数のExcelファイルを1つのシートに結合するにはどうすればよいですか?

  21. 21

    (Sparkスキュー結合)メモリの問題なしに、高度に複製されたキーを使用して2つの大きなSpark RDDを結合するにはどうすればよいですか?

  22. 22

    2つのリストを結合するときに重複するキーを処理するにはどうすればよいですか?

  23. 23

    2つの2つの要素データセット間で異なるオブジェクトを取得するにはどうすればよいですか?

  24. 24

    データセットを複数のデータセットに分割した後、計算を実行するにはどうすればよいですか?

  25. 25

    1つのpytorchnnの2つのデータセットに対して2つの損失を使用するにはどうすればよいですか?

  26. 26

    Pythonを使用して、データの複数の列をそれぞれの行に結合するにはどうすればよいですか?

  27. 27

    長さが異なるインデックスとして配列を使用して、パンダデータフレームで一度に複数の値を変更するにはどうすればよいですか?

  28. 28

    異なるモジュールによって依存関係として使用されるときに、同じnode.jsパッケージが複数回インストールされるのを回避するにはどうすればよいですか?

  29. 29

    2つのテーブルで内部結合を使用した後に複数の行を追加するにはどうすればよいですか?

ホットタグ

アーカイブ