如何使用r中的dplyr在特定位置插入空白行

zhi*_* li 5 r dplyr

我想在数据帧中的特定位置插入空白行。

我的数据框是这样的:

dat <- data.frame(group = c(rep('A', 1),rep('B', 4),rep('C', 2), rep('D', 2)))
  group
1     A
2     B
3     B
4     B
5     B
6     C
7     C
8     D
9     D
Run Code Online (Sandbox Code Playgroud)

我的预期是这样的:

dat.wanted <- data.frame(group = c(NA,rep('A', 1),NA,rep('B', 4),NA,rep('C', 2), NA,rep('D', 2)))
   group
1   <NA>
2      A
3   <NA>
4      B
5      B
6      B
7      B
8   <NA>
9      C
10     C
11  <NA>
12     D
13     D
Run Code Online (Sandbox Code Playgroud)

我尝试了一些代码:

# 1  bad codes cause you have to check the row numbers before use add_row() every time
dat.try1 <- dat %>% 
  add_row(.before = 2) %>% 
  add_row(.before = 7) %>% 
  add_row(.before = 10)

# 2 failure
dat.try2 <- dat %>% group_by(group) %>% add_row(.before = 1)

# 3 failure
dat.try3 <- dat %>% group_by(group) %>% mutate(rank = rank(group, ties.method= "first")) %>% ungroup()

dat.try3.2 <- if(dat.try3$rank == 1){dat.try3 <- add_row(dat.try3, .before = 1)}

Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?

任何帮助将不胜感激!

akr*_*run 5

group_split带有and 的选项map

library(dplyr)
library(purrr)
dat %>%
    group_split(group) %>% 
    map_dfr(~ .x %>% 
               add_row(group = NA, .before = 1))
# A tibble: 13 x 1
#   group
#   <chr>
# 1 <NA> 
# 2 A    
# 3 <NA> 
# 4 B    
# 5 B    
# 6 B    
# 7 B    
# 8 <NA> 
# 9 C    
#10 C    
#11 <NA> 
#12 D    
#13 D    
Run Code Online (Sandbox Code Playgroud)

或者与data.table

library(data.table)
setDT(dat)[, .(group = c(NA, group)), .(group1 = group)][, group1 := NULL][]
Run Code Online (Sandbox Code Playgroud)