R 关于NA的处理办法

1.锁定NA的位置

which(is.na(data3)) 

which会将Matrix或者DataFrame展开成Vector,然后计算缺失值。就类似于as.vector(A)一样。如果想要确切地知道哪行哪列的数据是缺失值,可以在which函数中加入参数:

 which(is.na(data3),arr.ind = T)

2.锁定NA出现的行

找出数据集中有缺失值的行

3.有些格为空字符串而非NA

data2[data2==""]<-NA

4.将NA统一为0

is.nan.data.frame <- function(x)do.call(cbind, lapply(x, is.nan))
mydata[is.na(mydata)] <- 0

5.去除NA的行

下面用实例来说明这两个函数的作用:

这是一个数据框final:

 gene hsap mmul mmus rnor cfam

 1 ENSG00000208234 0 NA NA NA NA

 2 ENSG00000199674 0 2 2 2 2

 3 ENSG00000221622 0 NA NA NA NA

 4 ENSG00000207604 0 NA NA 1 2

 5 ENSG00000207431 0 NA NA NA NA

 6 ENSG00000221312 0 1 2 3 2

如果要去除有NA的行,则可用:final[complete.cases(final),] 也可用 na.omit(final)

那么,返回值是

  gene hsap mmul mmus rnor cfam

 2 ENSG00000199674 0 2 2 2 2

 6 ENSG00000221312 0 1 2 3 2

现在,我只想过滤部分列:我们就只能用final[complete.cases(final[,5:6]),]
结果是:

  gene hsap mmul mmus rnor cfam

 2 ENSG00000199674 0 2 2 2 2

 6 ENSG00000221312 0 1 2 3 2

这样第四行含有空值,但是,我们的命令是只过滤第5列,第6列中含有NA的行

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值