首页 > 解决方案 > 计算缺失值时用行交换列

问题描述

我想编写一个计算数据框中缺失值的函数。在输出中,我想要计算缺失值的数据框。让我们采取以下代码:

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"

标签: rdataframemissing-data

解决方案


您可以通过转置将输出转换为数据帧:

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

推荐阅读