我确定这个问题有一个简单的解决方案,但我无法搞清楚。我有一个以下格式的数据框:
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")
答案 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