我希望(通过名称)知道我的数据框中的哪些列满足特定条件。例如,如果我正在寻找包含超过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
因此,这实际上成功地评估了哪些列满足条件,但是,它不显示列名。也许对我感兴趣的列进行子集化将是另一种方法,但我不确定如何以这种方式解决它。另外,我更愿意知道是否有一种 直接获取名称的方式 我会感激任何意见。
答案 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"