2017-10-11 35 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 

現在我想,這不是在數據集中考慮地區和類別的每個組合充滿了一個VALUE1和VALUE2 0.這df的結果應該是:

 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循環的動態字符串,但是我覺得只用幾行代碼就可以做到這一點。我猜我覺得太複雜了。有任何想法嗎?先謝謝你。

+0

您的結果輸出或者缺少類別值,或者區域與輸出數據不同 - 對於組合,也許'expand.grid()'會有所幫助。 –

+0

在基礎R中,如上所述,在當前的例子中,d do'dfNew < - merge(df,expand.grid(df [1:2]),all = TRUE); df [is.na(df)] < - 0'。 – lmo

回答

2

使用complete從tidyr:

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。這就是我在寫一個更簡單的方法時的意思。你救了我的一天! :) –