2016-11-21 80 views
2

我確定有一個簡單的解決方案來解決這個問題,但我很難解決它。我在以下格式的數據幀:按因子水平插入缺失的行

Number Category Type Count 
1  X  A  10 
2  X  B  14 
3  Y  B  3 
4  Z  A  14 

「類型」是一個因素兩個級別,{A,B},並且每個水平得到至少一個「類別」條目,(爲簡單起見,它們在這裏表示爲XYZ,但在我的實際數據集中有太多的列表)。我想每個類型都有分類匹配的行數:

Number Category Type Count 
1  X  A  10 
2  X  B  14 
3  Y  A  <NA> 
4  Y  B  3 
5  Z  A  14 
6  Z  B  <NA> 

舉例來說,如果A類型是四排A類的上市,但B型沒有A類列表,然後四個新行應該創建類別A,類型B(計數= NA)。同樣,如果類型A獲得四行的類別A和類型B有兩個,那麼應該創建兩個新行。

我能找到關於如何做到這一點,使用seq()expand.grid()merge()缺少時間序列數據的日期無數的答案,但我不能完全看怎麼做,在這種情況下。我希望這是明確的...感謝任何幫助!

dat <- read.table(header = TRUE, text = 
       "Number Category Type Count 
        1  X  A  10 
        2  X  B  14 
        3  Y  B  3 
        4  Z  A  14") 
+2

'tidyr ::完整(數據,類別,類型)' – Khashaa

+0

如此優雅,謝謝! – beddotcom

回答

2

使用expand.grid,使主列表,然後merge

alllevs <- do.call(expand.grid, lapply(dat[c("Type","Category")], levels)) 
merge(dat, alllevs, all.y=TRUE) 

# Category Type Number Count 
#1  X A  1 10 
#2  X B  2 14 
#3  Y A  NA NA 
#4  Y B  3  3 
#5  Z A  4 14 
#6  Z B  NA NA