2016-11-21 47 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