R 如何根据某些条件删除行

R 如何根据某些条件删除行,r,R,我的数据如下所示: row ID YU DV 1 1 0 . 2 1 . . 3 1 . . 4 1 . . 5 1 45 . 6 1 . 7 7 1 . . 8 1 . . 9 1 . . 10 1 65 . 11 1 . 5 12 1 . . 13 1 . . 14 1 . .

我的数据如下所示:

row  ID  YU  DV
 1    1   0   .
 2    1   .   .
 3    1   .   .
 4    1   .   .
 5    1   45  .
 6    1   .   7
 7    1   .   .
 8    1   .   .
 9    1   .   .
 10   1   65  .
 11   1   .   5
 12   1   .   .
 13   1   .   .
 14   1   .   .
 15   2   20  .
 16   2   .   .
 17   2   .   5
 18   2   .   .
 19   2   .   .
 20   2   0   .
 21   2   .   .
 22   2   .   .
 23   2   .   .
 24   2   43  .
 25   2   .   3
 26   2   .   .
 27   2   .   .
 28   2   .   .
因此,每当YU列中的值变为0时,我希望它所在的行变为零,以及后面的所有行,直到YU中的值变为非零,由包含值1(如果不是零)的变量DF标识。我希望它看起来像这样:

row  ID  YU  DV  DF
 1    1   0   .  1
 2    1   .   .  1
 3    1   .   .  1
 4    1   .   .  1
 5    1   45  .  0
 6    1   .   7  0
 7    1   .   .  0
 8    1   .   .  0
 9    1   .   .  0
 10   1   65  .  0
 11   1   .   5  0
 12   1   .   .  0
 13   1   .   .  0
 14   1   .   .  0
 15   2   20  .  0
 16   2   .   .  0
 17   2   .   5  0
 18   2   .   .  0
 19   2   .   .  0
 20   2   0   .  1
 21   2   .   .  1
 22   2   .   .  1
 23   2   .   .  1
 24   2   43  .  0
 25   2   .   3  0
 26   2   .   .  0
 27   2   .   .  0
 28   2   .   .  0

使用
dplyr
tidyr
的解决方案:

library(dplyr); library(tidyr);
df %>% mutate(DF = as.integer(as.numeric(as.character(YU)) == 0)) %>% fill(DF)

   row ID YU DV DF
1    1  1  0  .  1
2    2  1  .  .  1
3    3  1  .  .  1
4    4  1  .  .  1
5    5  1 45  .  0
6    6  1  .  7  0
7    7  1  .  .  0
8    8  1  .  .  0
9    9  1  .  .  0
10  10  1 65  .  0
11  11  1  .  5  0
12  12  1  .  .  0
13  13  1  .  .  0
14  14  1  .  .  0
15  15  2 20  .  0
16  16  2  .  .  0
17  17  2  .  5  0
18  18  2  .  .  0
19  19  2  .  .  0
20  20  2  0  .  1
21  21  2  .  .  1
22  22  2  .  .  1
23  23  2  .  .  1
24  24  2 43  .  0
25  25  2  .  3  0
26  26  2  .  .  0
27  27  2  .  .  0
28  28  2  .  .  0

这里是另一个带有
数据的选项。表
动物园

library(data.table)
library(zoo)
setDT(df1)[, DF := na.locf(+(!as.numeric(YU)))]
df1
#    row ID YU DV DF
# 1:   1  1  0  .  1
# 2:   2  1  .  .  1
# 3:   3  1  .  .  1
# 4:   4  1  .  .  1
# 5:   5  1 45  .  0
# 6:   6  1  .  7  0
# 7:   7  1  .  .  0
# 8:   8  1  .  .  0
# 9:   9  1  .  .  0
#10:  10  1 65  .  0
#11:  11  1  .  5  0
#12:  12  1  .  .  0
#13:  13  1  .  .  0
#14:  14  1  .  .  0
#15:  15  2 20  .  0
#16:  16  2  .  .  0
#17:  17  2  .  5  0
#18:  18  2  .  .  0
#19:  19  2  .  .  0
#20:  20  2  0  .  1
#21:  21  2  .  .  1
322:  22  2  .  .  1
323:  23  2  .  .  1
#24:  24  2 43  .  0
#25:  25  2  .  3  0
#26:  26  2  .  .  0
#27:  27  2  .  .  0
#28:  28  2  .  .  0
或者其他选择是

with(df1, na.locf(c(NA, 0, 1)[(YU!=".") + (YU=="0")+1]))
#[1] 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0

你在用什么编程语言?你能分享你试过的任何代码吗?@pseudoAJ 8我在用r。我正在尝试这样的事情:for(我在unique(data$ID)中){data$DF 0只应该被识别。你真的有
或者他们是
NA
x@rawr它是。没有NA