计算缺失值时,用行交换列

问题描述

我想写一个函数来计算数据框中的缺失值。在输出中,我想计算缺失值的数据框。让我们看下面的代码

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(.))))
}