Как узнать имена столбцов, которые удовлетворяют условию во фрейме данных

Я хочу знать (по имени), какие столбцы в моем фрейме данных удовлетворяют определенному условию. Например, если я искал имена любых столбцов, которые содержали более 3 NA, как я мог продолжить?

>frame
  m  n  o  p
1 0 NA NA NA
2 0  2  2  2
3 0 NA NA NA
4 0 NA NA  1
5 0 NA NA NA
6 0  1  2  3
> for (i in frame){
  na <- is.na(i)
  as.numeric(na)
  total<-sum(na)
  if(total>3){
  print (i) }}
[1]  NA  2 NA NA NA  1
[2]  NA  2 NA NA NA  2

Таким образом, на самом деле удается оценить, какие столбцы удовлетворяют условию, однако не отображает имя столбца. Возможно, подмножество интересующих меня столбцов было бы другим способом сделать это, но я также не уверен, как решить это таким образом. Кроме того, я бы предпочел узнать, есть ли способ просто получить имена напрямую.
Я буду признателен за любой вклад.

1 ответ

Мы можем использовать colSums на логической матрице (is.na(frame)), проверьте, больше ли это 3, чтобы получить логическое vector а затем подмножество names "кадр" на основе этого.

names(frame)[colSums(is.na(frame))>3]
#[1] "n" "o"

Если мы используем dplyrодин из способов

library(dplyr)
frame %>% 
  summarise_each(funs(sum(is.na(.))>3)) %>% 
  unlist() %>% 
  names(.)[.]
#[1] "n" "o"
Другие вопросы по тегам