2016-11-21 12 views
2

この問題は単純な解決策だと確信していますが、わかりにくいです。私は、次のフォーマットのデータフレームを有する:不足行を因子レベルで挿入する

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

「タイプ」は、2つのレベル、{A、B}を有する因子であり、各レベルは、少なくともつの「カテゴリ」項目、(簡単のために取得しますここではXYZと表記しますが、実際のデータセットにはリストするにはあまりにも多くあります)。タイプAは、4つの新しい行、その後、カテゴリーAの4行に記載されているが、タイプBは何のカテゴリーAのリストを持っていない場合、たとえば、

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の場合は、タイプBを作成する必要があります(カウント= NA)。同様に、タイプAがカテゴリーAの4つの行を取得し、タイプBが2つある場合、2つの新しい行を作成する必要があります。

は私が 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 
関連する問題