处理'空'值

问题描述 投票:3回答:1

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

先感谢您。

r
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.