2017-10-11 11 views
1

私の例のデータセット:塗りつぶしデータフレームに組み合わせが欠落し

df <- data.frame(
REGION = c("REGION A", "REGION A", "REGION B"), 
CATEGORY = c("A", "B", "B"), 
VALUE1 = c(2,3,4), 
VALUE2 = c(1,2,3) 
) 

結果:

REGION CATEGORY VALUE1 VALUE2 
1 REGION A A    2  1 
2 REGION A B    3  2 
3 REGION B B    4  3 

は、今私は、データセットでは考慮されていない領域とCATEGORYのすべての組み合わせが充填されていることを望みますこのdfの0結果のVALUE1およびVALUE2は以下のようになります。

 REGION CATEGORY VALUE1 VALUE2 
    1 REGION A A   2  1 
    2 REGION A B   3  2 
    3 REGION B A   4  3 
    4 REGION B B   0  0 

私はalread yはforループを使って動的な文字列を生成する大きな関数を書いていますが、コードのほんの数行でこれを行うもっと簡単な方法があると感じています。私はあまりにも複雑すぎると思っています。何か案は?前もって感謝します。 tidyrから

+0

結果の出力にカテゴリの値がないか、地域が出力データと異なる - 組み合わせの場合、おそらく 'expand.grid()'が役立ちます。 –

+0

上記のように、現在の例では、dはdfNew < - merge(df、expand.grid(df [1:2])、all = TRUE)です。 df [is.na(df)] < - 0 'である。 – lmo

答えて

2

使用complete

library(tidyr) 
as.data.frame(complete(df,REGION,CATEGORY,fill=list(VALUE1=0,VALUE2=0))) 

出力:

REGION CATEGORY VALUE1 VALUE2 
1 REGION A  A  2  1 
2 REGION A  B  3  2 
3 REGION B  A  0  0 
4 REGION B  B  4  3 

多くの変数がある場合は、あなたもちょうどas.data.frame(complete(df,REGION,CATEGORY))を行い、その後NA年代を置き換えることができます。

希望すると便利です。

+0

あなたの速い応答のためにありがとう@Florian。これは私がもっと簡単な方法について書いていたときの意味です。あなたは私の一日を救った! :) –

関連する問題