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

Я хочу знать (по имени), какие столбцы в моем фрейме данных удовлетворяют определенному условию. Например, если бы я искал имена любых столбцов, содержащих более 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

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


person Iztly    schedule 02.04.2016    source источник


Ответы (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"
person akrun    schedule 02.04.2016