给出下面的数据集...
col1 col2 var1 var2 var3
1 1 NA NA NA
2 2 NA NA NA
3 3 NA 3 NA
4 4 4 4 4
5 5 5 5 5
6 6 6 NA 6
7 7 NA 7 7
8 8 NA NA NA
9 9 9 NA NA
10 10 NA NA NA
...如何以自动化的方式(最好使用tidyverse)删除包含all select列only的NA的行?
col1 col2 var1 var2 var3
3 3 NA 3 NA
4 4 4 4 4
5 5 5 5 5
6 6 6 NA 6
7 7 NA 7 7
8 8 NA NA NA
9 9 9 NA NA
那么,在上面的示例中,如何仅在数据集的开始和结尾删除所有列var1-var3中包含Nas的那些行?也就是说,只有第1、2和10行应该消失.(虽然第8行包含所有这些 Select 变量的NAS,但不应将其删除,因为它不在数据集的"开始"或"结束"处.)
以下是我的整洁解决方案:
library(tidyverse)
have <- tibble(col1 = 1:10, col2 = 1:10, var1 = 1:10, var2 = 1:10, var3 = 1:10)
have[c(1, 2, 10), 3:5] <- NA
have[3, c(3, 5)] <- NA
have[6, 4] <- NA
have[7, 3] <- NA
have[8, 3:5] <- NA
have[9, 4:5] <- NA
no_select_vars <- 3 # The number of select variables
want <- have |>
mutate(no_missing = rowSums(across(-c(col1, col2), ~ is.na(.x)))) |>
slice(first(which(no_missing < no_select_vars)):n()) |>
slice(1:last(which(no_missing < no_select_vars))) |>
select(-no_missing)
有没有用于此目的的现有函数,或者比我的更优雅的解决方案?