2010-09-05 84 views
3

我使用sqldf -package将csv文件导入到R中。我有几个数值和字符串变量的缺失值。我注意到缺少的值在数据框中留空(与填充NA或其他内容相反)。我想用用户定义的值替换缺失的值。显然,在这种情况下,像is.na()这样的函数将不起作用。“空”值的处理

玩具据帧有三列:

A B C 
3 4 
2 4 6 
34 23 43 
2 5 

我想:

A B C 
3 4 NA 
2 4 6 
34 23 43 
2 5 NA 

预先感谢您。

回答

4

假设你在sqldf使用read.csv.sql与默认sqlite数据库它是生产对于C的因子列,以便

(1)刚转换的值使用as.numeric(as.character(...))像这样的数字:

> Lines <- "A,B,C 
+ 3,4, 
+ 2,4,6 
+ 34,23,43 
+ 2,5, 
+ " 
> cat(Lines, file = "stest.csv") 
> library(sqldf) 
> DF <- read.csv.sql("stest.csv") 
> str(DF) 
'data.frame': 4 obs. of 3 variables: 
$ A: int 3 2 34 2 
$ B: int 4 4 23 5 
$ C: Factor w/ 3 levels "","43","6": 1 3 2 1 
> DF$C <- as.numeric(as.character(DF$C)) 
> str(DF) 
'data.frame': 4 obs. of 3 variables: 
$ A: int 3 2 34 2 
$ B: int 4 4 23 5 
$ C: num NA 6 43 NA 

(2),或者如果我们使用sqldf(..., method = "raw")那么我们可以只使用as.numeric

> DF <- read.csv.sql("stest.csv", method = "raw") 
> str(DF) 
'data.frame': 4 obs. of 3 variables: 
$ A: int 3 2 34 2 
$ B: int 4 4 23 5 
$ C: chr "" "6" "43" "" 
> DF$C <- as.numeric(DF$C) 
> str(DF) 
'data.frame': 4 obs. of 3 variables: 
$ A: int 3 2 34 2 
$ B: int 4 4 23 5 
$ C: num NA 6 43 NA 

(3)如果可行的话您使用read.csv那么我们确实得到NA填补权:

> str(read.csv("stest.csv")) 
'data.frame': 4 obs. of 3 variables: 
$ A: int 3 2 34 2 
$ B: int 4 4 23 5 
$ C: int NA 6 43 NA