[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
質問
2つのデータフレームがある。
df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))
df1
# CustomerId Product
# 1 Toaster
# 2 Toaster
# 3 Toaster
# 4 Radio
# 5 Radio
# 6 Radio
df2
# CustomerId State
# 2 Alabama
# 4 Alabama
# 6 Ohio
データベーススタイル、つまり、どうすればいいのでしょう。 sql style, joins ? つまり、どうすればいいんだ。
-
An
内部結合
の
df1
とdf2
:
左のテーブルのキーと右のテーブルのキーが一致する行だけを返します。 -
について
外部結合
の
df1
とdf2
:
両方のテーブルから、右のテーブルのキーと一致する左のレコードを結合して、すべての行を返します。 -
A
左外部結合(または単に左結合)
の
df1
とdf2
左のテーブルから全ての行を、右のテーブルからキーが一致する行を返します。 -
A
右外部結合
の
df1
とdf2
右のテーブルから全ての行を、左のテーブルからキーが一致する行を返します。
エクストラクレジット
SQL形式のselect文はどうすればいいのでしょうか?
解決するには?
を使用することで
merge
関数とそのオプションのパラメータを使用します。
内部結合。
merge(df1, df2)
は、R が自動的に共通の変数名でフレームを結合するため、これらの例では動作しますが、ほとんどの場合、フレームに
merge(df1, df2, by = "CustomerId")
を使用して、必要なフィールドのみでマッチングしていることを確認します。 また
by.x
と
by.y
パラメータを使用することで、マッチングする変数が異なるデータフレームで異なる名前を持っている場合、その変数が使用されます。
外部結合。
merge(x = df1, y = df2, by = "CustomerId", all = TRUE)
左外側。
merge(x = df1, y = df2, by = "CustomerId", all.x = TRUE)
右の外側。
merge(x = df1, y = df2, by = "CustomerId", all.y = TRUE)
クロスジョイント
merge(x = df1, y = df2, by = NULL)
<ストライク 内部結合と同様に、マッチング変数として明示的に"CustomerId"をRに渡したいことでしょう。 入力の data.frames が予期せず変更された場合にも安全ですし、後で読みやすくなります。
複数の列に対してマージを行う場合は
by
のようなベクトルです。
by = c("CustomerId", "OrderId")
.
マージするカラム名が異なる場合は、例えば、以下のように指定することができます。
by.x = "CustomerId_in_df1", by.y = "CustomerId_in_df2"
ここで
CustomerId_in_df1
は最初のデータフレームの列の名前であり
CustomerId_in_df2
は2番目のデータフレームの列の名前です。(複数の列でマージする必要がある場合は、これらはベクトルでもかまいません)。
関連
-
二項演算子への非数値引数を報告するR言語エラー
-
8.2 カマグラ(No.31〜No.40)
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] データフレームのカラムのデータ型を決定する
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする
-
[解決済み] data.tablesのX[Y]結合では、なぜ完全な外部結合や左結合ができないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R: hclust(d, method = method)でのエラー : 外部関数呼び出しは NA/NaN/Inf(arg10) を持つことができません。
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
-
[解決済み] ggplot2 の軸ラベルを回転させ、間隔を空ける
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] コマンドラインからRスクリプトを実行する
-
[解決済み] 空のdata.frameを作成する
-
[解決済み] ベクトル中のxの値を持つ要素の個数を数える
-
[解決済み] Rで文字列から最後のn文字を抽出する