2016-12-29 23 views
-3

私は2つのデータフレームを持っています。次のようにそれらは次のとおりです。異なる長さの2つのデータフレームを結合する方法は?

df1 
Date Duration 
6/27/2014 10.00 
6/30/2014 20.00 
7/11/2014 15.00 

df2 
Date Percent_Removal 
6/27/2014 20.39 
6/30/2014 27.01 
7/7/2014 49.84 
7/11/2014 59.48 
7/17/2014 99.04 

私はDF1の「日」の列に基づいてこれらの2つのデータフレームをマージします。私の出力がある

df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y") 
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y") 
df3<- as.data.frame (merge(df1,df2,by.x = "Date",all.x = TRUE)) 

Date  Duration_sum Percent_Removal 
6/27/2014  10.00   NA 
6/30/2014  20.00   NA 
7/11/2014  15.00   NA 

DF3

誰か場合、私は非常に感謝されるだろう、私は次の関数を試してみました

df3 
Date Duration_sum Percent_Removal 
6/27/2014 10.00  20.39 
6/30/2014 20.00  27.01 
7/11/2014 15.00  59.48 

:出力は次のようになります。この問題で私を助けることができます。前もって感謝します。

+1

'merge.data.frame(df1、df2)' – dww

+1

'df3 = merge(df1、df2、by =" Date "、all.x = TRUE)'です。これは、 'df1'の' Date'にマッチしない 'df2'の行を破棄します。両方のデータフレームからすべての行を保持したい場合は、他のデータフレームに一致するかどうかに関係なく、 'all.x = TRUE'ではなく' all = TRUE'を使用します。 – eipi10

+0

(1) 'merge(df1、df2、by =" Date "、all = TRUE)の結果はどうですか? (2)文字の値として保存された日付の同じ質問。 –

答えて

0

これはコメントには長すぎますが、私がコメントで与えた解決策が機能することを実証する必要があります。あなたが仕事にマージ取得に問題がある場合は、あなたがあなたのdata.framesのdput

df1 = read.table(text = 
"Date Duration 
6/27/2014 10.00 
6/30/2014 20.00 
7/11/2014 15.00", 
header = T) 

df2 = read.table(text = 
"Date Percent_Removal 
6/27/2014 20.39 
6/30/2014 27.01 
7/7/2014 49.84 
7/11/2014 59.48 
7/17/2014 99.04", 
header = T) 

df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y") 
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y") 

df3 = merge(df1,df2) 
#   Date Duration Percent_Removal 
# 1 2014-06-27  10   20.39 
# 2 2014-06-30  20   27.01 
# 3 2014-07-11  15   59.48 

注追加オプションなしそれを提供しなかったので、我々は診断できないあなたのデータと他のいくつかの問題が、存在しなければなりません

  1. デフォルト値by =は、両方のデータフレームに共通の列名です。この場合、Dateのみが共有されます。
  2. all.x,all.yおよびallのデフォルト値は、両方のデータフレームにある行のみが保持される場合に望ましい動作を示します。
+0

本当に残念ですが、実際には日付の値に小さな問題がありました。私はそれを修正し、現在機能をうまくマージします。手伝ってくれてどうもありがとう。 – Sami

0

あなたはスーパー怠惰なると完全に三DFを避けることができます:

df1$Percent_removal<-df2$Percent_removal[df2$Date==df1$Date] 

あなただけの各DFに各日付の1つのインスタンスを持っている場合にのみ有効となります。もっと微妙なアプローチは、plyrパッケージを使用することです。

+0

エラーメッセージが表示される:「長いオブジェクトの長さは短いオブジェクトの倍数ではありません」 – Sami

関連する問題