按因子级别插入缺失的行

时间:2016-11-21 03:19:14

标签: r

我确定这个问题有一个简单的解决方案,但我无法搞清楚。我有一个以下格式的数据框:

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

"类型"是一个有两个级别{A,B}的因子,每个级别至少一个"类别"条目,(为简单起见,它们在这里表示为XYZ,但在我的实际数据集中有太多要列出的内容)。我希望每个Type必须按类别匹配的行数:

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(使用Count = 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")

1 个答案:

答案 0 :(得分: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