2016-09-08 5 views
1

私はウェブサイトで検索しようとしましたが、私の質問に対する答えは見つかりませんでした。既にある場合はリンクを書いてください。国別アンケートの2つのデータフレームを、2年の異なるパネルではなく、パネルでまとめます(r)

私は全国調査の2つのデータフレームを持っています。毎年、私はすでにインタビューを受けた家族と新しいものがあります。私はデータフレームをマージして、両方のデータフレームに存在するファミリだけを持ち、2014の値を1つの行に、2012の値を各個人に合わせるためにマッチさせたいとします(semplicity I調査には他の社会的変数は含まれていない)。例えば

:DF1およびDF2

nquest家族の数であり、
> df1 <- data.frame(nquest=c(173, 526, 1066, 1066), nord=c(1,1,1,2), year=c(2014, 2014, 2014, 2014)) 
> structure(df1) 
    nquest nord year 
1 173 1 2014 
2 526 1 2014 
3 1066 1 2014 
4 1066 2 2014 

> df2 <- data.frame(nquest=c(173, 526, 3456, 3456), nord=c(1,1,1,2), year=c(2012, 2012, 2012, 2012)) 
> structure(df2) 
    nquest nord year 
1 173 1 2012 
2 526 1 2012 
3 3456 1 2012 
4 3456 2 2012 

ファミリーの成分ノール(EX 1人の父、母2)。

私はこの方法でそれらをマージしたい:

> df <- data.frame(nquest=c(173, 173, 526,526), nord=c(1,1,1,1), year=c(2014, 2012, 2014, 2012)) 
> structure(df) 
    nquest nord year 
1 173 1 2014 
2 173 1 2012 
3 526 1 2014 
4 526 1 2012 

私はそれらをマージしようとした:

tot <- merge (df1, df2, by=c("nquest", "nord") 
structure(tot) 
    nquest nord year.x year.y 
1 173 1 2014 2012 
2 526 1 2014 2012 

と私はrbind機能を試してみました:

> tot <- rbind(s, df2) 
> structure(tot) 
    nquest nord year 
1 173 1 201 
2 526 1 2014 
3 1066 1 2014 
4 1066 2 2014 
5 173 1 2012 
6 526 1 2012 
7 3456 1 2012 
8 3456 2 2012 

ありがとうございました

+0

ベースRのみを使って賢くないものを使うと、 'tot < - rbind(df1 [df1 $ nquest%in%df2 $ nquest、]、df2 [df2 $ nquest%in%df1 $ nquest、]) '。これはまず、各データフレームをフィルタリングして、両方のデータフレーム内のファミリのデータ行のみを含むようにし、それらを一緒にバインドします。 – brittenb

答えて

1

これは「dplyr」を使用してのアプローチは、おそらく年を指定し、「アレンジ」機能上の第2の条件が、この場合には必要ありません

bind_rows(df1, df2) %>% 
    filter(nquest %in% df1$nquest & nquest %in% df2$nquest) %>% 
    arrange(nquest, desc(year)) 

かかわらず、フィルタリングを行うには良い方法があるが、私はそこにそれを入れています補完のために

+0

答えをありがとうございます。私は新しい質問をしています:もし私もノンドも考慮に入れたいのですか? 1年ごとにコンポーネントの数が変化する可能性があります。 –

+0

nordとnquestの場合と同様に、両方のセットにも表示されますか? –

+0

はい、2012年には家族が4人(両親と2人の子供)で構成され、2014年には2人で構成されます(両親、息子は家に残っています) –

関連する問題