我有一份包含 NA 和 "1" 值的 tibble,我需要在距离少于 4 列的两个 "1" 值之间的同行所有值中加入 "1"。例如,以这个例子的 tibble 为例:
# Example Tibble
ex_input <- tibble( "A" = c(1, NA, NA, NA),
"B" = c(NA, NA, 1, 1),
"C" = c(1, 1, NA, NA),
"D" = c(1, NA, NA, NA),
"E" = c(1, NA, NA, NA),
"F" = c(1, NA, NA, NA),
"G" = c(1, 1, NA, NA),
"H" = c(1, NA, NA, 1),
"I" = c(1, NA, NA, NA),
"J" = c(1, NA, 1, 1))
看起来像:
> print(ex_input)
# A tibble: 4 x 10
A B C D E F G H I J
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 NA 1 1 1 1 1 1 1 1
2 NA NA 1 NA NA NA 1 NA NA NA
3 NA 1 NA NA NA NA NA NA NA 1
4 NA 1 NA NA NA NA NA 1 NA 1
最终需要的输出是在B1、D2、C2、E2和I2中添加“1”,因为它们都在两个距离小于4列的“1”值之间的一行中。 如下所示:
> print(output)
# A tibble: 4 x 10
A B C D E F G H I J
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 1 1 1 1 1 1
2 NA NA 1 1 1 1 1 NA NA NA
3 NA 1 NA NA NA NA NA NA NA 1
4 NA 1 NA NA NA NA NA 1 1 1
提前感谢您的帮助!
ex_input %>% rowid_to_column() %>% pivot_longer(-rowid) %>% pivot_wider(names_from = rowid)
这并不是一个解决方案,但可能是一个很好的起点。 - Dan Adamszoo::rollapply()
和data.table::frollapply()
也是如此。 - Dan Adams