2017-08-09 4 views
0

2つのデータセット(テーブル)を共通化していますが、それらのobsは共通ではありません。 - 実際には、dataset2をdataset2に追加し、dataset2の列名を追加したいのですが、テーブルの空のフィールドにNAを入力する必要があります。 私がしたことは、次の機能を試したことです。2つのテーブルを共通の変数で結合しますが、一般的な観測はしません

matchcol = function(x,y){ 
    y = y[,match(colnames(x),colnames(y))] 
    colnames(y)=colnames(x) 
    return(y) 
} 


sum =matchcol(dataset1,dataset2) 

data = rbind(dataset1,dataset2) 

でも、 「エラー:。?。NA列のインデックスはサポートされていない 私は何ができる私は私のコードで何を変更することができます

Thxを!!

+1

たぶん 'dplyr :: bind_rowsを'? – Craig

+0

質問はちょっと混乱します.2番目のデータセットの列名を取得し、最初のデータセットにその列が存在しない場合は、最初のデータセットに "NA"という値を追加しますか? –

答えて

-1

私は右のあなたの質問を理解していれば、それはdplyrのように見える:: FULL_JOINは良好ですそのために:

library(dplyr)  
dataset1 <- data.frame(Var_A = 1:10, Var_B = 100:109)  
dataset2 <- data.frame(Var_A = 11:20, Var_C = 200:209)  
dataset_new <- full_join(dataset1, dataset2)  
dataset_new 

これは自動的に共通の列名で2つのデータセットを結合し、両方のデータセットから他のすべての列を追加し、空のフィールドは、NASあります

あなたのための作業を行い

。。?
+1

OPは、2つのデータセットが共通の観測値を持たず、本質的にデータフレームを積み重ねているように指定しました。 'full_join'は、2つのデータセットがマージされたカラムで共通の値を持つ場合、危険です。私は 'bind_rows'がここでより安全なオプションだと思っています – Craig

+0

それにもかかわらず、それは上記の問題を解決します。どのような「一般的な観察」を扱うべきかについての情報は提供されていません。あなたがIDについて考えるならば、ほとんどの場合、同じIDを持ついくつかの観測ではなく、結合をしたいと思うでしょう。 –

+1

あなたが参加するID変数を持っているなら、私はあなたに同意します。しかし、望ましくない合併を防ぐために、OPはID変数について言及していません。一般的に、私は、合併/合併が、「by」変数を特に危険な命題とすることなく見つけるが、それは全く異なる会話である – Craig

1

あなたは同じ列名を持っている必要がありますが、bind_rowsdplyrからパッケージにあなたは、このしようとしないrbind使用するには:

library(dplyr) 
data <- bind_rows(dataset1, dataset2) 

例:

dataset1 <- data.frame(a= 1:5,b=6:10) 
dataset2 <- data.frame(a= 11:15,c=16:20) 
data <- bind_rows(dataset1,dataset2) 
#  a b c 
# 1 1 6 NA 
# 2 2 7 NA 
# 3 3 8 NA 
# 4 4 9 NA 
# 5 5 10 NA 
# 6 11 NA 16 
# 7 12 NA 17 
# 8 13 NA 18 
# 9 14 NA 19 
# 10 15 NA 20 
関連する問題