删除 R 中不具有非连续 NA 值的组
Remove groups which do not have non-consecutive NA values in R
我有以下数据框
group <- c(2,2,2,2,4,4,4,4,5,5,5,5)
D <- c(NA,2,NA,NA,NA,2,3,NA,NA,NA,1,1)
df <- data.frame(group, D)
df
group D
1 2 NA
2 2 2
3 2 NA
4 2 NA
5 4 NA
6 4 2
7 4 3
8 4 NA
9 5 NA
10 5 NA
11 5 1
12 5 1
我只想保留包含非连续 NA 值的组至少一次。在这种情况下,第 5 组将被删除,因为它不包含非连续的 NA 值,但仅包含连续的 NA 值。第 2 组和第 4 组保留下来,因为它们确实包含非连续的 NA 值(NA 值由具有非 NA 值的行分隔)。
因此生成的数据框将如下所示:
df2
group D
1 2 NA
2 2 2
3 2 NA
4 2 NA
5 4 NA
6 4 2
7 4 3
8 4 NA
有什么想法:)?
如何使用每组 NA 值索引之间的差异?
library(dplyr)
df %>% group_by(group) %>% filter(any(diff(which(is.na(D))) > 1))
## A tibble: 8 x 2
## Groups: group [2]
# group D
# <dbl> <dbl>
#1 2. NA
#2 2. 2.
#3 2. NA
#4 2. NA
#5 4. NA
#6 4. 2.
#7 4. 3.
#8 4. NA
我不确定这会捕获所有潜在的边缘情况,但它似乎适用于给定的示例。
我有以下数据框
group <- c(2,2,2,2,4,4,4,4,5,5,5,5)
D <- c(NA,2,NA,NA,NA,2,3,NA,NA,NA,1,1)
df <- data.frame(group, D)
df
group D
1 2 NA
2 2 2
3 2 NA
4 2 NA
5 4 NA
6 4 2
7 4 3
8 4 NA
9 5 NA
10 5 NA
11 5 1
12 5 1
我只想保留包含非连续 NA 值的组至少一次。在这种情况下,第 5 组将被删除,因为它不包含非连续的 NA 值,但仅包含连续的 NA 值。第 2 组和第 4 组保留下来,因为它们确实包含非连续的 NA 值(NA 值由具有非 NA 值的行分隔)。
因此生成的数据框将如下所示:
df2
group D
1 2 NA
2 2 2
3 2 NA
4 2 NA
5 4 NA
6 4 2
7 4 3
8 4 NA
有什么想法:)?
如何使用每组 NA 值索引之间的差异?
library(dplyr)
df %>% group_by(group) %>% filter(any(diff(which(is.na(D))) > 1))
## A tibble: 8 x 2
## Groups: group [2]
# group D
# <dbl> <dbl>
#1 2. NA
#2 2. 2.
#3 2. NA
#4 2. NA
#5 4. NA
#6 4. 2.
#7 4. 3.
#8 4. NA
我不确定这会捕获所有潜在的边缘情况,但它似乎适用于给定的示例。