我的数据如下:
Row x y
1 1 2
2 2 3
3 3 4
4 4 3
5 5 NA
6 1 NA
7 2 NA
8 3 NA
9 4 NA
10 5 7
11 1 NA
12 2 NA
13 3 NA
14 4 NA
15 5 NA
我希望删除第11到15行,因为对于x的所有周期y都是NA(对于第11到15行,x等于x,则y与NA相等)。我不会删除其他行,因为当x从1移到5时,存在至少一个y而不是NA(就像从第6行到10一样,当x为5时y是7,因此我保留第6到10行) 。我想知道如何编写R代码来实现这一目标。
答案 0 :(得分:1)
使用基数R,并假设x已排列且所有均从1开始。
subset(df,!ave(is.na(y),cumsum(c(1,diff(x)<0)),FUN=all))
Row x y
1 1 1 2
2 2 2 3
3 3 3 4
4 4 4 3
5 5 5 NA
6 6 1 NA
7 7 2 NA
8 8 3 NA
9 9 4 NA
10 10 5 7
使用tidyverse:
df%>%
group_by(m = cumsum(c(1,diff(x)<0)))%>%
filter(!all(is.na(y)))
# A tibble: 10 x 4
# Groups: m [2]
Row x y m
<int> <int> <int> <dbl>
1 1 1 2 1
2 2 2 3 1
3 3 3 4 1
4 4 4 3 1
5 5 5 NA 1
6 6 1 NA 2
7 7 2 NA 2
8 8 3 NA 2
9 9 4 NA 2
10 10 5 7 2
您当然可以取消选择,然后删除m