我正在使用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
提前谢谢。
答案 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