2017-10-06 70 views

回答

1

我的方法:

df <- data.frame(values = c(4, 2, 4, NA, 61, 2, 5, 634, NA, 431, NA, 54352, 323, 45, NA)) 

df[is.na(df)] <- 0 

变化df

values 
1  4 
2  2 
3  4 
4  NA 
5  61 
6  2 
7  5 
8  634 
9  NA 
10 431 
11  NA 
12 54352 
13 323 
14  45 
15  NA 

values 
1  4 
2  2 
3  4 
4  0 
5  61 
6  2 
7  5 
8  634 
9  0 
10 431 
11  0 
12 54352 
13 323 
14  45 
15  0 
1

这是一个常见问题。请参阅https://github.com/ggrothendieck/sqldf上的FAQ#8。正如所讨论的那样,update不会返回一个值。你需要使用select明确地返回一个:

library(sqldf) 

# test input. BOD is builtin data frame that comes with R. 
BOD$Time[3] <- NA 

sqldf(c("update BOD set Time = 0 where Time is null", 
     "select * from main.BOD")) 

Time demand 
1 1 8.3 
2 2 10.3 
3 0 19.0 
4 4 16.0 
5 5 15.6 
6 7 19.8 

我们看到了NA用零填充。

当sqldf与最新版本的RSQLite - 版本2.0一起使用时,update的使用会导致警告;不管怎样,它仍然可以正常工作,所以在RSQLite解决这个问题之前,要么忽略警告,要么使用早期版本的RSQLite。