我正在用0和1填充R中的数据帧,并且在某些情况下,只要满足条件,我需要在两个连续的行之间插入一行。如果C列== 1(第一行;i)或A列== 1(连续行,i + 1),它们之间插入的行在B列中应该是1,在A列和C列中应该是0。这个条件也应该以相反的方式适用(如果A列== 1,连续行中有C列== 1)
A列 | B列 | C列 | 1 | 0 | 0 |
---|---|---|
0 | 1 | 0 |
0 | 0 | 1 |
0 | 0 | 1 |
0 | 0 |
所以我不理解这个条件,因为首先你说OR,然后是and,但是我创建了一个代码,你可以使用并适应你想要的条件。
数据df <-
tibble::tribble(
~Column.A, ~Column.B, ~Column.C,
1L, 0L, 0L,
0L, 1L, 0L,
0L, 0L, 1L,
0L, 0L, 1L,
1L, 0L, 0L
)
代码library(tidyr)
library(dplyr)
df %>%
mutate(aux = row_number()) %>%
bind_rows(
df %>%
mutate(aux = row_number() + .5) %>%
filter((Column.A == 1 & lead(Column.C) == 1) | (Column.C == 1 & lead(Column.A) == 1)) %>%
mutate(Column.B = 1, Column.A = 0, Column.C = 0)
) %>%
arrange(aux)
输出# A tibble: 6 x 4
Column.A Column.B Column.C aux
<dbl> <dbl> <dbl> <dbl>
1 1 0 0 1
2 0 1 0 2
3 0 0 1 3
4 0 0 1 4
5 0 1 0 4.5
6 1 0 0 5