创建缺少值的新数据框

时间:2015-10-03 16:15:04

标签: r

我有一个像这样的数据框

time <- c(1,1,1,1,2,2)
group <- c('a','b','c','d','c','d')
number <- c(2,3,4,1,2,12)

df <- data.frame(time,group,number)

  time group number
1    1     a      2
2    1     b      3
3    1     c      4
4    1     d      1
5    2     c      2
6    2     d     12

为了绘制数据,我需要它在每个时间间隔包含每个组(来自a-d)的值,即使它们等于零。所以数据框看起来像这样:

 time group number
1    1     a      2
2    1     b      3
3    1     c      4
4    1     d      1
5    2     a      0
6    2     b      0
7    2     c      2
8    2     d     12

任何帮助?

2 个答案:

答案 0 :(得分:5)

您可以使用expand.gridmerge,如下所示:

> merge(df, expand.grid(lapply(df[c(1, 2)], unique)), all = TRUE)
  time group number
1    1     a      2
2    1     b      3
3    1     c      4
4    1     d      1
5    2     a     NA
6    2     b     NA
7    2     c      2
8    2     d     12

从那里开始,将NA替换为0只是一个简单的问题。

答案 1 :(得分:0)

new <- merge(df, expand.grid(lapply(df[c(1, 2)], unique)), all.y = TRUE)
new[is.na(new$number),"number"]  <- 0
new