如何找出满足数据框中条件的列的名称

时间:2016-04-02 08:10:42

标签: r dataframe conditional-statements names

我希望(通过名称)知道我的数据框中的哪些列满足特定条件。例如,如果我正在寻找包含超过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 个答案:

答案 0 :(得分:1)

我们可以在逻辑矩阵(colSums)上使用is.na(frame),检查它是否大于3以获得逻辑vector,然后对names的{​​{1}}进行子集化框架'基于此。

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"