R语言寻找数据集缺失值位置

R语言寻找data.frame缺失值位置

前言

R语言中并没有现成函数给出缺失值所在的位置,函数 is.na() 返回一个与原数据同型的逻辑“矩阵”(不一定是矩阵类型),现在我们自行编写一个函数用来寻找缺失值的具体位置,并在此基础上我们可以进一步画出缺失值的散点图,观察其分布等一系列操作。

代码及解释

na_position <- function(x){
  # x <- as.matrix(x)
  temp <- which(is.na(x))
  if(setequal(temp, integer(0))){
    return(temp)
  }
  temp_row <- dim(x)[1]
  result <- data.frame(matrix(0, length(temp), 2))
  colnames(result) <- c("Row", "Column")
  for(i in 1:length(temp)){
    result[i, 1] <- temp[i] %% temp_row
    result[i, 2] <- temp[i] %/% temp_row + 1
  }
  return(result)
}
  • # x <- as.matrix(x) 这句话视情况看要不要注释掉,因为在接下来的操作中有些数据类型并不能顺利通过,所以需要先进行数据转换,这里转换成 matrix 类型是因为 matrix 的开销相对较小。
  • 还有一种情况算是前面的子情况,就是一个数据有双类型甚至是更多的类型,而在后面的代码运行中,使用了不好的类型。
  • 假使没有缺失值,将返回 integer(0),这是个非常特殊的符号,代表啥也没有,空集,不能简单的与0做比较,integer(0) == 0结果出来是FALSE,而不会是TRUE,因此需要函数setequal()进行判断
  • 关于result[i, 1] <- temp[i] %% temp_rowresult[i, 2] <- temp[i] %/% temp_row + 1,熟悉编程的语言可能已经想到了,实际上这与 矩阵、数据框等按列存放 有关,举个例子,
> A=matrix(1:12, 3, 4)
> A[2,3] <- NA
> A
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5   NA   11
[3,]    3    6    9   12
> which(is.na(A))
[1] 8

这里为啥是8不是7呢?因为它是按列数的

  • 最后,结果以 data.frame 形式返回

后续的一些观察与处理

result <- na_position(data)
# 获取缺失值所在的所有行
na_row <- unique(result[ ,1])
# 获取缺失值所在的所有列
na_col <- unique(result[ ,2])
# 直观观察缺失值的分布
plot(result)
# 缺失值是否会服从正态分布?
Shaporo.test (···)
# 缺失值是否服从均匀分布
chisq.test(···)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值