当文件中存在NULL时,如何读取文件,使其转为NA?

R: 当文件中存在NULL时,如何读取文件,使其转为NA?

文件如下(case.txt):

  charCol floatCol intCol
1:       a      1.5     10
2:       b     NULL      3
3:       c      3.9   NULL
4:       d     -3.4      4

1.常用读取方式

> require(data.table)
> x<-fread("case.txt")
> x
   charCol floatCol intCol
1:       a      1.5     10
2:       b     NULL      3
3:       c      3.9   NULL
4:       d     -3.4      4
> str(x)  #你会发现 含有NULL数值的那一行都转变为了字符串类型,而NULL代表的含义应该是missing value,应该是NA
Classes ‘data.table’ and 'data.frame':  4 obs. of  3 variables:
 $ charCol : chr  "a" "b" "c" "d"
 $ floatCol: chr  "1.5" "NULL" "3.9" "-3.4"
 $ intCol  : chr  "10" "3" "NULL" "4"
 - attr(*, ".internal.selfref")=<externalptr> 

2.正确做法

> y<-fread("case.txt",na.strings = "NULL") #加一个na.string="NULL"即可
> y
   charCol floatCol intCol
1:       a      1.5     10
2:       b       NA      3
3:       c      3.9     NA
4:       d     -3.4      4
> y[,lapply(.SD,typeof)]  #这样的话,第二列第三列的类型就不是字符类型了
     charCol floatCol  intCol
1: character   double integer

3.R中的NA和NULL

  • NA代表 这个值是缺失值
  • NULL 代表这个值不存在,这个值是个空值(NULL is often returned by expressions and functions whose values are undefined.)

如下例

> c(1,2,3,NULL,4)
[1] 1 2 3 4
> c(1,2,3,NA,4)
[1]  1  2  3 NA  4

由上可得:

  • 可以看出NA是有长度属性的。length(NA)=1length(NULL)=0
  • 与两者相关的函数有is.na(),is.null(),as.null等

4. 易犯错误

  • x==NA或者x=NULL来判断一个数值是不是NA或者NULL

如下:

> x=NA
> ifelse(x==NA,print(1),print(0))
[1] NA
> y<-NULL
> ifelse(y==NULL,1,0)
logical(0)

这样是判断不出来的。正确做法应为:

> ifelse(is.na(x),1,0)
[1] 1
> ifelse(is.null(y),1,0)
[1] 1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值