2016-04-27 4 views
0

このような2つのデータフレームをマージしようとしています。私が欲しいものRを使用して、同じ名前の列を保持する2つのデータフレームをマージします( "by"変数ではない)

DF1:  
'data.frame': 82 obs. of 4 variables: 
$ hemmabutik  : int 
$ Sales_2016_np : int 
$ Sales_2016_mar : int 



DF2:  
'data.frame': 82 obs. of 4 variables: 
$ hemmabutik  : int 
$ Sales_2016_mar : int 



enter code here 

DF3 <- merge(x = DF1, y = DF2, by = c("hemmabutik"), all=TRUE) 

DF3:  
'data.frame': 82 obs. of 4 variables: 
$ hemmabutik  : int 
$ Sales_2016_np : int 
$ Sales_2016_mar.x: int 
$ Sales_2016_mar.y: int 

はこれです:

DF3:  
    'data.frame': 82 obs. of 4 variables: 
    $ hemmabutik  : int 
    $ Sales_2016_np : int 
    $ Sales_2016_mar: int 

そして私はDF2の「Sales_2016_mar」のためのフィールド値がDF1からの値の上に書くべきことをしたいです。

誰でもこの問題を解決できますか?

+0

データを共有するには、 'dput()'を使用してください。 – Sotos

+0

変数 'Sales_2016_mar'は両方のデータフレームで同じですか? 'by 'の標準オプションは' intersect(names(x)、names(y)) ' –

+0

のように' merge(x = DF1、y = DF2、all = TRUE)どのように[再現可能な例]を与えるか(http://stackoverflow.com/help/how-to-ask)(http://stackoverflow.com/questions/5963269/how-to-ask) make-a-great-r-reproducible-example/5963610)を参照してください。これは他の人があなたを助けることをはるかに容易にします。 – Jaap

答えて

0

のは、我々は2 data.frames、DF1とDF2を持っているとしましょう。ここでは

df1 <- data.frame(a=letters[1:10], b=letters[11:20], c=LETTERS[5:14]) 
df2 <- data.frame(a=letters[1:10], b=letters[1:10]) 

あなたはmerge()機能で何ができるかです:ちょうど、b.yのものとb.xの値を置き換えb.xの名前を変更し、 b.yドロップ:

0123:

df3 <- merge(x = df1, y = df2, by = "a", all=TRUE) 
df3$b.y <- df3$b.x 
df3$b.y <- NULL 
colnames(df3) <- c('a','b','c') 

そうでない場合、あなたはシンプルな1行のソリューションのためのdplyrパッケージを使用することができます

library(dplyr) 
left_join(df1, df2, by="a") %>% transmute(a, b = b.y) 
+0

問題は、変数名が動的で、月と年によって異なります。したがって、共通の列/ sの名前/ sを正しいデータフレームの値で上書きできる構文を探しています。 –

+0

その場合、 'merge()'を使用して列名から '.y'をgrepしようとする価値があります。こうすることで、関心のある列名を取得し、置換/削除を実行できます。 – Knak

関連する問題