有关add add_row和group_by的问题.在add_row中需要group_by变量名

Mat*_*t D 2 r dplyr tibble

问题:我想使用dplyr/tibble添加add_row.我想在我的示例中按A分组数据,然后是包含组名A的add_row,然后是B的值.

我面临的问题是尝试在A下的列中添加Group_by变量A.无论我尝试什么,它总是返回错误或NA作为该列中的值.

  1. 可重复的例子:

    example <- data.frame(A = sample(letters[1:3],10,replace = TRUE), 
                  B = sample(letters[24:26],10,replace = TRUE),
                  C = sample(1:3,10,replace = TRUE))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 示例数据的输出:

          A B C
       1  c y 2
       2  b x 3
       3  c y 1
       4  b y 1
       5  c z 1
       6  a x 1
       7  b x 1
       8  c z 2
       9  a y 3
       10 c y 1
    
    Run Code Online (Sandbox Code Playgroud)
  3. 代码我想运行.

    answer <- example %>%
      mutate(A = as.character(A),
             B = as.character(B)) %>%
      group_by(A) %>%
      do(add_row(., 
                 B = "ADDED",
                 C = "ADDED"))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 输出数据:

            A     B     C
      1     a     x     1
      2     a     y     3
      3  <NA> ADDED ADDED
      4     b     x     3
      5     b     y     1
      6     b     x     1
      7  <NA> ADDED ADDED
      8     c     y     2
      9     c     y     1
     10     c     z     1
     11     c     z     2
     12     c     y     1
     13  <NA> ADDED ADDED
    
    Run Code Online (Sandbox Code Playgroud)
  5. 所以在数据的输出中,如果有NA,我希望它说组名(a,b或c)

我试过在那里只放置组变量名称,它不起作用会引发错误.

谢谢!

aos*_*ith 5

你可以直接在里面添加它do.

example %>%
    mutate_if(is.factor, as.character) %>%
    group_by(A) %>%
    do(add_row(., 
               A = unique(.$A),
               B = "ADDED",
               C = "ADDED"))
Run Code Online (Sandbox Code Playgroud)

或者tidyr::fill在最后使用.因为它必须ungroup首先填充分组变量.

library(tidyr)

example %>%
    mutate_if(is.factor, as.character) %>%
    group_by(A) %>%
    do(add_row(.,
               B = "ADDED",
               C = "ADDED")) %>%
    ungroup() %>%
    fill(A)

# A tibble: 13 x 3
       A     B     C
   <chr> <chr> <chr>
 1     a     z     2
 2     a     x     1
 3     a     y     2
 4     a ADDED ADDED
 5     b     y     1
 6     b     z     1
 7     b ADDED ADDED
 8     c     z     2
 9     c     y     2
10     c     z     2
11     c     y     2
12     c     z     1
13     c ADDED ADDED
Run Code Online (Sandbox Code Playgroud)