R 如何复制,或;填写「;与excel中一样,在一定数量的行上下移动一个值

R 如何复制,或;填写「;与excel中一样,在一定数量的行上下移动一个值,r,dplyr,R,Dplyr,我不知道如何简单地将data.frame值向上或向下复制一个整数行 例如,如果我有这个data.framedf: randcol <- c("s","a","m","p","l", "e","d","a","t","a","h","e","l","l","o") x <- c(NA,NA,"a",NA,NA,NA,NA,"b",NA,NA,NA,"c",NA,NA,NA) df <- data.frame(randcol, x) randcol我们使用“x”中的非NA值创建一

我不知道如何简单地将data.frame值向上或向下复制一个整数行

例如,如果我有这个data.frame
df

randcol <- c("s","a","m","p","l", "e","d","a","t","a","h","e","l","l","o")
x <- c(NA,NA,"a",NA,NA,NA,NA,"b",NA,NA,NA,"c",NA,NA,NA)
df <- data.frame(randcol, x)

randcol我们使用“x”中的非NA值创建一个分组变量,然后执行
replace
操作

library(dplyr)
df %>%
   group_by(grp = cumsum(!is.na(x))) %>% 
   mutate(x = replace(x, 2:pmin(3,n()), x[1])) %>% 
   ungroup %>% 
   select(-grp)
# A tibble: 15 x 2
#   randcol x     
#   <fctr>  <fctr>
# 1 s       <NA>  
# 2 a       <NA>  
# 3 m       a     
# 4 p       a     
# 5 l       a     
# 6 e       <NA>  
# 7 d       <NA>  
# 8 a       b     
# 9 t       b     
#10 a       b     
#11 h       <NA>  
#12 e       c     
#13 l       c     
#14 l       c     
#15 o       <NA>  
df %>%
   tidyr::fill(x) %>% 
   group_by(x1 = x) %>% 
   mutate(x = case_when(row_number() >3 ~ NA_character_,
                      TRUE ~ as.character(x))) %>%
   ungroup %>% 
   select(-x1)