您的位置:首页 > 其它

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

2017-04-06 23:26 281 查看

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)=1
length(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: