2つのデータフレームにそれぞれ異なる列数があります。いくつかの列は、2つのデータフレームの間で共通です。 2つのデータフレームの共通の列のみを新しいデータフレームにどのようにバインドできますか?2つのデータセットの共通列のみをバインドする方法
私はlibrary(plyr);rbind.fill(A,B)
で試しましたが、一致しない列にNA値を設定しています。これは私には役に立ちません。
どうもありがとう EC
2つのデータフレームにそれぞれ異なる列数があります。いくつかの列は、2つのデータフレームの間で共通です。 2つのデータフレームの共通の列のみを新しいデータフレームにどのようにバインドできますか?2つのデータセットの共通列のみをバインドする方法
私はlibrary(plyr);rbind.fill(A,B)
で試しましたが、一致しない列にNA値を設定しています。これは私には役に立ちません。
どうもありがとう EC
は、共通の列を取得するにはintersect
を使用してください。
dfr1 <- data.frame(x = 1:5, y = runif(5), z = rnorm(5))
dfr2 <- data.frame(w = letter[1:5], x = 6:10, y = runif(5))
common_cols <- intersect(colnames(dfr1), colnames(dfr2))
rbind(
subset(dfr1, select = common_cols),
subset(dfr2, select = common_cols)
)
は、あなたは小さなパフォーマンスとタイピング改善のため
rbind(
dfr1[, common_cols],
dfr2[, common_cols]
)
と最後の行を置き換えることができます。
rbind(
dfr1[common_cols],
dfr2[common_cols]
)
でも動作しますが、少しはっきりしないと思います。ここで
私の解決策である私は右
df1 <- data.frame(a=rnorm(100), b=rnorm(100), not=rnorm(100))
df2 <- data.frame(a=rnorm(100), b=rnorm(100))
bind1 <- bind1 <- df1[, names(df1) %in% names(df2)]
bind2 <- bind1 <- df1[, names(df2) %in% names(df1)]
rbind(bind1, bind2)
'df2'に' df1'以外の列があるとどうなりますか? –
また、 'subset'の呼び出しは必要ありません。後で索引付けを使用する場合は、%names(df2)の 'names(df1)% 'によって作成された論理ベクトルを渡すことができます。 –
あなたの最初のコメントについて:df2にdf1にない列がある場合 - それらは一般的ではなく、フィルタリングしたくない - あるいは間違っていますか?あなたの2番目のコメントについて:右これはおそらく私はそれがちょっとやっかすぎたかもしれません... – Seb
交差のニースの使用あなたの質問を得た願っています! +1 – ECII
非常に簡潔で分かりやすい。 +1 –
ここではサブセットを使用する必要はありません。一般的に、非標準評価を使用する関数ではプログラミングを避けたいと考えています。なぜなら 'dfr1 [common_cols]'と比べてかなり冗長であるからです。 – hadley