R 如何复制,或;填写「;与excel中一样,在一定数量的行上下移动一个值
我不知道如何简单地将data.frame值向上或向下复制一个整数行 例如,如果我有这个data.frameR 如何复制,或;填写「;与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值创建一
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)