当文件中存在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
相关文章推荐
- [ios]如何使用 Xcode,读取和写入存在的数据库文件?
- tp读取已存在excel文件,并转为数组
- 假设一个网站系统存在两个配置文件web.config和config.config,那么我如何读取config.config的配置节呢?System.Configuration名字空间下的接口好象只能读
- 如何把接口配置信息存在本地并从文件中读取配置信息
- 如何从内存中读取受保护的文件?
- 如何有效的使用C#读取文件
- 如何有效的使用C#读取文件
- asp.net如何读取局域网内文件啊?
- InternetReadFile如何正确读取二进制文件
- 使用c#如何读取xml文件
- 如何从文件读取 XML(完整例程)
- [Config]如何利用ConfigurationSettings.AppSettings.GetValues读取配置文件中多个同Key的value
- 如何读取XML文件内容!
- 如何用WEB读取远程机器上的文件
- 如何读取资源文件里的中文字符串
- 谁能告诉我如何在文件中读取运算脚本文件?
- 如何读取PSD文件(photoshop)的图层......
- 如何在 Java 应用程序中读取8 位和24 位位图文件
- 如何有效的使用C#读取文件 (转)
- 如何有效地使用C#读取文件