如何为具有NA值的数据框中的所有列创建汇总函数

时间:2018-07-13 03:29:34

标签: dplyr

我想使用summarize_all()函数为数据框中的所有列创建一个具有摘要功能的数据框,并且该数据框具有NA值。

Input->  
    a b   
    0 1
Output->  
a.min a.max a.mean a.sd b.min b.max b.mean b.sd
0 0 0 0 1 1 1 1

Code:  
df<- df%>%   
  summarize_all(funs( min , max ,mean, sd))

如何处理此代码中的空值?

1 个答案:

答案 0 :(得分:0)

在有问题的数据框中发布了NA值,因为没有足够的数据来计算标准差。见下文:

> df1<-data.frame("a"=0,"b"=1)
> df1%>%   
+   summarize_all(funs( min , max ,mean, sd))
  a_min b_min a_max b_max a_mean b_mean a_sd b_sd
1     0     1     0     1      0      1  NaN  NaN

> df2<-data.frame("a"=c(0,1,2,3),"b"=c(1,3,5,7))
> df2%>%   
+   summarize_all(funs( min , max ,mean, sd))
  a_min b_min a_max b_max a_mean b_mean     a_sd     b_sd
1     0     1     3     7    1.5      4 1.290994 2.581989

如果数据集中具有NA值,则使用na.rm = T将解决您的目的:

> df3<-data.frame("a"=c(0,1,NA,3),"b"=c(1,3,5,7))

# with na.rm=T
> df3%>%   
+   summarize_all(funs( min , max ,mean, sd),na.rm=T)
  a_min b_min a_max b_max   a_mean b_mean     a_sd     b_sd
1     0     1     3     7 1.333333      4 1.527525 2.581989

# without na.rm=T
> df3%>%   
+   summarize_all(funs( min , max ,mean, sd))
  a_min b_min a_max b_max a_mean b_mean a_sd     b_sd
1    NA     1    NA     7     NA      4  NaN 2.581989