问题描述
我想写一个函数来计算数据框中的缺失值。在输出中,我想计算缺失值的数据框。让我们看下面的代码:
total_missing<-function(data){
(colSums(is.na(data)))
}
x<-rnorm(100)
y<-runif(100)
z<-rexp(100)
x[51]<-NA
x[57]<-NA
y[61]<-NA
y[62]<-NA
z[10]<-NA
df1<-data.frame(x,y,z)
> total_missing(df1)
x y z
2 2 1
但是现在它不是数据帧。要检查我是否只是使用
> class(total_missing(df1))
[1] "numeric"
因此,第一个想法是使用
> as.data.frame((total_missing(df1)))
(total_missing(df1))
x 2
y 2
z 1
我有数据框!问题是我在行中有变量,而在列中缺少值,我不喜欢这种解决方案。我试图将行更改为列,但问题是此数据框仅包含一列,因此所有内容都已连接(很难划分)。你有什么想法要获得输出:
>proper_data_frame
x y z
2 2 1
class(proper_data_frame)="data.frame"
解决方法
您可以通过转置将输出转换为数据帧:
total_missing<-function(data){
as.data.frame(t(colSums(is.na(data))))
}
total_missing(df1)
# x y z
#1 2 2 1
class(total_missing(df1))
#[1] "data.frame"
您也可以在dplyr
中进行此操作:
library(dplyr)
total_missing<-function(data){
data %>% summarise(across(.fns = ~sum(is.na(.))))
}