Найти индекс столбцов, содержащих более 5 значений NA - PullRequest
0 голосов
/ 07 июня 2018

Я хочу установить подкадр данных и извлечь только столбцы, содержащие 5 или более значений NA.

data.frame(A = rep(1, 10), B = c(rep(2,5), rep(3,5)), D = rep(5, 10), E = c(rep(1,2), rep(NA,6), rep(6,2)), F = c(rep(NA,2), rep(2,8)))

   A B D  E  F
1  1 2 5  1 NA
2  1 2 5  1 NA
3  1 2 5 NA  2
4  1 2 5 NA  2
5  1 2 5 NA  2
6  1 3 5 NA  2
7  1 3 5 NA  2
8  1 3 5 NA  2
9  1 3 5  6  2
10 1 3 5  6  2

Так что в этом примере я хочу получить индекс столбца "E".

Мой исходный набор данных содержит около 3000 столбцов, поэтому скорость более или менее важна.

Я пытался сделать это с помощью sum(is.na) и filter_if(any_vars), но все безрезультатно.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Использование ColSums с is.na

names(df)[colSums(is.na(df))>5]
[1] "E"
0 голосов
/ 07 июня 2018
which(unlist(lapply(df, function(x) sum(is.na(x)) > 5)))
4 
0 голосов
/ 07 июня 2018

Мы можем использовать colSums на логической матрице (is.na(df1)), получить индекс с помощью which и извлечь names

names(which(colSums(is.na(df1)) >= 5))
#[1] "E"
...