根据r中的条件在连续行之间插入一行



我正在用0和1填充R中的数据帧,并且在某些情况下,只要满足条件,我需要在两个连续的行之间插入一行。如果C列== 1(第一行;i)或A列== 1(连续行,i + 1),它们之间插入的行在B列中应该是1,在A列和C列中应该是0。这个条件也应该以相反的方式适用(如果A列== 1,连续行中有C列== 1)

tbody> <<tr>1
A列 B列 C列
100
010
001
001
00

所以我不理解这个条件,因为首先你说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 

最新更新