Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr将行添加到数据帧中每个组的开头_R_Dplyr_Rbind - Fatal编程技术网

使用dplyr将行添加到数据帧中每个组的开头

使用dplyr将行添加到数据帧中每个组的开头,r,dplyr,rbind,R,Dplyr,Rbind,我希望有一个快速的问题,但很难弄清楚我想做什么。我想: 保留数据中存在的分组 向每个组添加一行,其中“值”的值为零,而“期间中的月份”的值为该组的第一行 因此,新数据框的第一行将是1,0,0,对于我的组,value,months,in,period。当我们点击my_group=3时,对于my_group,value,months,period,第一行是3,0,0 我看到这个问题非常相似,但不同之处在于我想为数据帧中的每个分组添加一行 示例数据 df_example <- structur

我希望有一个快速的问题,但很难弄清楚我想做什么。我想:

  • 保留数据中存在的分组
  • 向每个组添加一行,其中“值”的值为零,而“期间中的月份”的值为该组的第一行
  • 因此,新数据框的第一行将是1,0,0,对于我的组,value,months,in,period。当我们点击my_group=3时,对于my_group,value,months,period,第一行是3,0,0

    我看到这个问题非常相似,但不同之处在于我想为数据帧中的每个分组添加一行

    示例数据

    df_example <- 
    structure(list(my_group = c(1L, 1L, 1L, 1L, 3L, 3L, 3L, 5L, 5L, 
    5L, 7L, 7L, 7L), value = c(0.11, -1.27, -1.61, -0.59, -0.56, 
    -2.06, -2.53, 0.98, -0.06, -2.65, -0.54, -0.05, -1.33), months_in_period = c(1L, 
    2L, 3L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L)), class = c("tbl_df", 
    "tbl", "data.frame"), row.names = c(NA, -13L))
    
    # A tibble: 13 x 3
       my_group value months_in_period
          <int> <dbl>            <int>
     1        1  0.11                1
     2        1 -1.27                2
     3        1 -1.61                3
     4        1 -0.59                4
     5        3 -0.56                1
     6        3 -2.06                2
     7        3 -2.53                3
     8        5  0.98                1
     9        5 -0.06                2
    10        5 -2.65                3
    11        7 -0.54                1
    12        7 -0.05                2
    13        7 -1.33                3
    

    感谢您的帮助

    这可能不是最好的方法,但您可以将数据转换为宽格式,添加额外的行,然后再次重塑为长格式

    库(tidyverse)
    #在第一行中添加一行
    df1%
    pivot\u更宽(名称\u from=我的\u组,
    值\u from=值)%>%
    添加行(.before=0)
    df1
    #>#tibble:5 x 5
    #>“1”“3”“5”“7”期间的月份`
    #>                  
    #>1娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜
    #> 2                1  0.11 -0.56  0.98 -0.54
    #> 3                2 -1.27 -2.06 -0.06 -0.05
    #> 4                3 -1.61 -2.53 -2.65 -1.33
    #>5.4-0.59不适用
    #将0分配到第一行
    df1[1,]%
    轴心周期更长(周期中的月份),
    names_to='my_group',
    值_to=“value”)%>%
    选择(我的组、值、期间内的月)%>%
    安排(我的团队,期间内的月份)%>%
    过滤器(!is.na(值))
    #>#A tibble:17 x 3
    #>我的集团价值月在期内
    #>                    
    #>  1 1         0                   0
    #>  2 1         0.11                1
    #>  3 1        -1.27                2
    #>  4 1        -1.61                3
    #>  5 1        -0.59                4
    #>  6 3         0                   0
    #>  7 3        -0.56                1
    #>  8 3        -2.06                2
    #>  9 3        -2.53                3
    #> 10 5         0                   0
    #> 11 5         0.98                1
    #> 12 5        -0.06                2
    #> 13 5        -2.65                3
    #> 14 7         0                   0
    #> 15 7        -0.54                1
    #> 16 7        -0.05                2
    #> 17 7        -1.33                3
    

    由(v0.3.0)于2020-03-29创建可能不是最好的方法,但您可以将数据转换为宽格式,添加额外的行,然后再次重塑为长格式

    库(tidyverse)
    #在第一行中添加一行
    df1%
    pivot\u更宽(名称\u from=我的\u组,
    值\u from=值)%>%
    添加行(.before=0)
    df1
    #>#tibble:5 x 5
    #>“1”“3”“5”“7”期间的月份`
    #>                  
    #>1娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜娜
    #> 2                1  0.11 -0.56  0.98 -0.54
    #> 3                2 -1.27 -2.06 -0.06 -0.05
    #> 4                3 -1.61 -2.53 -2.65 -1.33
    #>5.4-0.59不适用
    #将0分配到第一行
    df1[1,]%
    轴心周期更长(周期中的月份),
    names_to='my_group',
    值_to=“value”)%>%
    选择(我的组、值、期间内的月)%>%
    安排(我的团队,期间内的月份)%>%
    过滤器(!is.na(值))
    #>#A tibble:17 x 3
    #>我的集团价值月在期内
    #>                    
    #>  1 1         0                   0
    #>  2 1         0.11                1
    #>  3 1        -1.27                2
    #>  4 1        -1.61                3
    #>  5 1        -0.59                4
    #>  6 3         0                   0
    #>  7 3        -0.56                1
    #>  8 3        -2.06                2
    #>  9 3        -2.53                3
    #> 10 5         0                   0
    #> 11 5         0.98                1
    #> 12 5        -0.06                2
    #> 13 5        -2.65                3
    #> 14 7         0                   0
    #> 15 7        -0.54                1
    #> 16 7        -0.05                2
    #> 17 7        -1.33                3
    
    由(v0.3.0)于2020年3月29日创建

    df_example %>% 
      group_by(my_group) %>%
      rbind(data.frame(my_group = .$my_group, value = 0, months_in_period = 0), .)