我正在使用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
先感谢您。
假设你在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