0

Rで2つのdata.frameをマージしているときに、些細な問題に直面しています.

同じ列名を持つ 2 つの data.frames をマージしようとしていますが、R で同じ名前の列を 2 つの別々の列にするのではなく、1 つの列としてマージする必要があります。

通常、data.frames のマージ中に R が同じ名前の列に遭遇すると、接尾辞 "x" と "y" を持つ 2 つの個別の変数が作成されます。マージ コマンドでこれを指定して、異なるデータセット内の類似した名前の列を 1 つの列/変数として扱う方法はありますか?

例として使用できるコード:

x = data.frame(id = c("a","c","d","g"), 
              maths = c(1,3,4,7),  physics = c(1,3,4,7),  chemistry = c(1,3,4,7),  
           english = c(1,3,4,7))
y = data.frame(id = c("b","c","d","e","f"),
                maths = c(5,6,8,9,7), physics = c(5,6,8,9,7), chemistry = c(5,6,8,9,7),
           english = c(5,6,8,9,7))

xy <- merge(x, y, by = "id")

同じ名前の列から NA 以外の値を取得するマージされたデータ セットに新しい変数を作成できる同じ回避策がありますが、多数の列がある場合、これは非常に非効率的です。

この問題は、merge() ステートメントが 2 つの同じ名前の列を 1 つの列に結合するプロの SAS ユーザーによって通知されたため、SAS ユーザーはこの問題に関連しています。

また、以下の回答の1つとして、次を使用する場合:

xy <- merge(x, y, by = intersect(names(x), names(y)))

2 つの data.frames の間に交差はありません。理想的には、2 つの data.frames id = c("c","d") の観測ごとに 2 つ、ここに 4 つの観測があることを望みます。

これについて私を助けてくれるプロのRユーザーに感謝します。

ありがとう!

4

2 に答える 2

2

本当にマージしたいですrbind(x,y)か、それとも探しているものですか? あなたの例では、これは同じ結果になりますdata.frame( でソートした後id)。を実際にマージしたい場合はdata.frames、複製したくない名前を指定する必要があります。

merge(x, y, all=TRUE)
merge(x, y, by = c("id", "maths", "physics", "chemistry", "english"), all = TRUE)
于 2013-07-17T07:14:33.207 に答える
0

ここに私の簡単な解決策があります。

それが役に立てば幸い。x の最初の列は、参加する私の ID であることに注意してください

output <- merge(x[!(names(x)[2:length(names(x))] %in% names(y))], y, by.x = "id", by.y="id", all=TRUE)
于 2015-06-11T12:35:52.653 に答える