如何填写分组数据框中的行? (R)

时间:2018-03-07 19:21:24

标签: r dataframe dplyr tidyr

例如,如果我有一个按3个类别分组的数据框:

x = data.frame(
  location = c(1,2,2,2,2,2,3,3,3,3),
  type=c('a','b','b','b','b','b','c','c','c','c'),
  time=c(1,1,2,3,4,5,1,2,3,4),value=c(12,56,57,58,24,35,57,86,46,35)
)


   location type time value
1         1    a    1    12
2         2    b    1    56
3         2    b    2    57
4         2    b    3    58
5         2    b    4    24
6         2    b    5    35
7         3    c    1    57
8         3    c    2    86
9         3    c    3    46
10        3    c    4    35

我希望输出包含每个时间间隔的每个类型的每个位置。 (这三个分组将被填写,但值将为空)

有什么想法吗?熊猫似乎有堆叠和堆叠,但我不确定这是如何在R中模仿。

编辑:这里所需的输出应该是这样的

   location type time value
1         1    a    1    12
2         1    a    2    0
3         1    a    3    0
4         1    a    4    0
5         1    a    5    0
6         1    b    1    0
7         1    b    2    0
8         1    b    3    0
9         1    b    4    0
10        1    b    5    0

.....等等

1 个答案:

答案 0 :(得分:3)

您可以使用expand.grid()并添加@markus和@ Frank的建议:

y <- expand.grid(sapply(x[, 1:3], unique))
xy <- merge(y, x, all=TRUE)
str(xy)
# 'data.frame':   45 obs. of  4 variables:
#  $ location: num  1 1 1 1 1 1 1 1 1 1 ...
#  $ type    : Factor w/ 3 levels "a","b","c": 1 1 1 1 1 2 2 2 2 2 ...
#  $ time    : num  1 2 3 4 5 1 2 3 4 5 ...
#  $ value   : num  12 NA NA NA NA NA NA NA NA NA ...
head(xy)
#   location type time value
# 1        1    a    1    12
# 2        1    a    2    NA
# 3        1    a    3    NA
# 4        1    a    4    NA
# 5        1    a    5    NA
# 6        1    b    1    NA