Dataframe 统计数据帧中每列的非NA值数

Dataframe 统计数据帧中每列的非NA值数,dataframe,datatable,Dataframe,Datatable,我有一个包含大量NAs和一些非Na值的大数据集。 目前,我计算每列的非NA值,如下所示: attach(df) 1000 - (sum(is.na(X1))) 1000 - (sum(is.na(X2))) 1000 - (sum(is.na(X3))) 1000 - (sum(is.na(X4))) 1000 - (sum(is.na(X5))) ... detach(df) X1 Amount of Non-Na-Values X2 ... X3

我有一个包含大量NAs和一些非Na值的大数据集。 目前,我计算每列的非NA值,如下所示:

 attach(df)
 1000 - (sum(is.na(X1)))
 1000 - (sum(is.na(X2)))
 1000 - (sum(is.na(X3)))
 1000 - (sum(is.na(X4)))
 1000 - (sum(is.na(X5)))
 ...
 detach(df)
  X1     Amount of Non-Na-Values
  X2     ...
  X3     ...
  X4
  X5
  X6  
因此,我观察的总长度——我的NA值的总和

是否有一种更快的方法可以使用更少的代码行和键入工作,并让我快速查看所有非NA值的列和数量

像for循环之类的

我在找这样的东西:

 attach(df)
 1000 - (sum(is.na(X1)))
 1000 - (sum(is.na(X2)))
 1000 - (sum(is.na(X3)))
 1000 - (sum(is.na(X4)))
 1000 - (sum(is.na(X5)))
 ...
 detach(df)
  X1     Amount of Non-Na-Values
  X2     ...
  X3     ...
  X4
  X5
  X6  
谢谢:

试试这个:

nonNA_counts <- sapply(df, function(x) sum(!is.na(x)))
对于dplyr,这将是:

library(dplyr)

df %>%
summarise_all(funs(sum(!is.na(.)))
这种方法的优点是,您可以使用group_by before,并且您不需要关心列名,它只是汇总了所有列名。

您还可以在整个数据帧上调用is.na,隐式强制转换为逻辑矩阵,并在反向响应上调用colSums:

制作样本数据 第47集 df“数据帧”:100 obs。共有5个变量: >$V1:int NA 1NA 1NA 1NA。。。 >$V2:int不适用不适用1不适用10不适用。。。 >$V3:int 1 10 1不适用1不适用1不适用。。。 >$V4:int不适用于0不适用于0不适用于1不适用于。。。 >$V5:int不适用不适用不适用不适用0 0不适用不适用不适用。。。 科尔萨姆!是nadf吗 >V1 V2 V3 V4 V5 > 69 55 62 60 70
对于数据帧上的colwise操作,不是applydf,2,functionx sum!.nax是否更一致?@MikaelPoulJohannesson通常,我们应用于矩阵,在数据帧上使用sapply或lappy。在这种情况下,这没什么大不了的…不要使用附加,会导致比它解决的问题更多的问题。很容易产生bug。如果对数据进行任何子集、分组或重新排列,则附加的列可能彼此不同步,并且与实际数据不同步。还有更好的选择:许多函数都有一个数据参数,所以您根本不需要它,您可以将其用于其他任何事情。看到和