处理'空'值

时间:2010-09-05 00:23:47

标签: r

我正在使用sqldf - 包将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 

提前谢谢。

1 个答案:

答案 0 :(得分:4)

假设您在read.csv.sql中使用sqldf与默认的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