2010-09-05 89 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