将NA值从r加载到sql

时间:2019-06-30 23:54:35

标签: mysql r

我正在尝试将数据帧从r加载到sql,并且在使NA加载到sql中等效的NULL时遇到麻烦。它们以空白单元格的形式出现。示例数据:

data.frame(name = c('Sara', 'Matt', 'Kyle', 'Steve', 'Maggie', NA, 'Alex', 'Morgan'),
student_id = c(123,124,125,126,127,128,129,130),
           score = c(78, 83, 91, NA, 88, 92, NA, 77))

表架构:具有列名(varchar),student_id(int)和得分(int)的student_score

R代码:

load = "Insert into schema.student_score (name, student_id, score) values"  
data = list()  
for (i in seq(nrow(df))) {  
info = paste0("('", df$name[i], "','",  
df$student_id[i], "','",  
df$score[i], "')")  
data[[i]] = info  
}  
rows = do.call(rbind, data)  
values = paste(rows[,1], collapse = ',')  
send = paste0(load, values)  
dbSendQuery(conn, send)  

当它们在sql中加载时,它就会出现

name    student_id    score
Sara    123           78
Matt    124           83
Kyle    125           91
Steve   126           
Maggie  127           88
        128           92
Alex    129           
Morgan  130           77

我希望将空白值替换为NULL

1 个答案:

答案 0 :(得分:1)

在您的代码中,NA被翻译为"NA"。您需要将'NA'中的所有send替换为NULL。只需在末尾添加以下代码-

send <- gsub("'NA'", "NULL", send)
send

"Insert into schema.student_score (name, student_id, score) values('Sara','123','78'),('Matt','124','83'),('Kyle','125','91'),('Steve','126',NULL),('Maggie','127','88'),(NULL,'128','92'),('Alex','129',NULL),('Morgan','130','77')"