代码之家  ›  专栏  ›  技术社区  ›  N. Kim

如何在分组数据框中填充行?(R) [副本]

  •  1
  • N. Kim  · 技术社区  · 7 年前

    例如,如果我有一个按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 回复  |  直到 7 年前
        1
  •  3
  •   dcarlson    7 年前

    您可以使用 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