2017-09-13 10 views
1

私はいくつかのデータロガーの温度データを含む2つの大きなデータフレームを結合しようとしています。データロガーと列名は各データフレームで同じです。 1つのデータフレームは、他のデータフレームよりも新しい値を含む。重複する日付値に基づいてデータフレームを追加する方法は?

データは基本的に次のようになります。

date.time   date   temp1 temp2 
2011-08-22 19:00 2011-08-22 11.265 5.562 
2011-08-22 20:00 2011-08-22 11.254 6.541 
2011-08-22 22:00 2011-08-22 12.256 5.456 
2011-08-22 23:00 2011-08-22 13.568 15.265 

date.time<-c("2011-08-22 19:00", "2011-08-22 20:00", "2011-08-22 22:00","2011-08-22 23:00") 
date<-c("2011-08-22","2011-08-22","2011-08-22","2011-08-22") 
temp1<-c(11.265,11.254,12.256,13.568) 
temp2<-c(5.562,6.541,5.456,15.265) 
df_old<-data.frame(date.time,date,temp1,temp2) 

そして:

date.time   date   temp1 temp2 temp3 
2011-08-22 22:00 2011-08-22 12.256 5.456 24.598 
2011-08-22 23:00 2011-08-22 13.568 15.265 11.265 
2011-08-22 24:00 2011-08-22 11.275 5.563 25.295 
2011-08-23 00:00 2011-08-23 11.254 6.544 24.689 

date.time<-c("2011-08-22 22:00", "2011-08-22 23:00", "2011-08-22 24:00","2011-08-23 00:00") 
date<-c("2011-08-22","2011-08-22","2011-08-22","2011-08-23") 
temp1<-c(12.256,13.568,11.275,11.254) 
temp2<-c(5.456,15.265,5.563,6.544) 
temp3<-c(24.598,11.265,25.295,24.689) 
df_new<-data.frame(date.time,date,temp1,temp2,temp3) 

私が取得するDate.timeの列で共通の価値観に基づいて縦に一緒にこれらに参加したい:

date.time   date   temp1 temp2 temp3 
2011-08-21 19:00 2011-08-22 11.265 5.562 NA 
2011-08-21 20:00 2011-08-22 11.254 6.541 NA 
2011-08-21 22:00 2011-08-22 12.256 5.456 24.598 
2011-08-21 23:00 2011-08-22 13.568 15.265 11.265 
2011-08-21 24:00 2011-08-22 11.275 5.563 25.295 
2011-08-21 00:00 2011-08-23 11.254 6.544 24.689 

rbind.fillを使用して、もう一方に追加するだけで試しました。

df_all<-rbind.fill(df_old, df_new) 

これは、異なる数の列を考慮に入れます。ただし、date.time列に共有値を持つ行をまとめて配置するのではなく、列をもう一方の列の上に重ねるだけです。

これを行う方法を試しましたが、共有列の値に基づいてデータフレームを横並びにマージする方法しか見つけられませんでしたが、重なっているときに上から下にマージする方法値。

ありがとうございます!

答えて

1

何を記述していることは、マージであるように思え:

merge(df_old,df_new,by=c("date.time","date","temp1","temp2"),all=TRUE) 

出力:

  date.time  date temp1 temp2 temp3 
1 2011-08-22 19:00 2011-08-22 11.265 5.562  NA 
2 2011-08-22 20:00 2011-08-22 11.254 6.541  NA 
3 2011-08-22 22:00 2011-08-22 12.256 5.456 24.598 
4 2011-08-22 23:00 2011-08-22 13.568 15.265 11.265 
5 2011-08-22 24:00 2011-08-22 11.275 5.563 25.295 
6 2011-08-23 00:00 2011-08-23 11.254 6.544 24.689 

を編集:

eipi10 @行うには別のオプションを示唆したように同じ:

library(dplyr) 

full_join(df_old, df_new) 
+1

また、 'library(dplyr); full_join(df_old、df_new) 'です。 – eipi10

関連する問題