用交替模式填充单元格

  • 本文关键字:填充 单元格 模式 r
  • 更新时间 :
  • 英文 :


我正在尝试用上面行的值填充空白单元格。类似于 na.locf 函数,但我有一个需要匹配的模式。我不一定知道新值之间有多少行(即在 a、b 和 c,d 之间(。

我已经使用了na.locf并四处寻找解决方案,但无济于事。

df <- df <- data.frame(col1 = c("a","b", NA, NA, NA, NA, "c", "d", NA, NA))
df
#    col1
# 1     a
# 2     b
# 3  <NA>
# 4  <NA>
# 5  <NA>
# 6  <NA>
# 7     c
# 8     d
# 9  <NA>
# 10 <NA>

我想要的解决方案:

df
col1
a
b
a
b
a
b
c
d
c
d
ave(df$col1,
with(rle(!is.na(df$col1)), rep(cumsum(values), lengths)),
FUN = function(x){
rep(x[!is.na(x)], length.out = length(x))
})
# [1] a b a b a b c d c d

这是dplyr的方式。如果需要,可以删除group列。-

df %>% 
group_by(group = cumsum(is.na(lag(col1)) & !is.na(col1))) %>%
mutate(
col1 = rep(col1[!is.na(col1)], length.out = n())
) %>% 
ungroup()
# A tibble: 10 x 2
col1  group
<chr> <int>
1 a         1
2 b         1
3 a         1
4 b         1
5 a         1
6 b         1
7 c         2
8 d         2
9 c         2
10 d         2

最新更新