首页 > 解决方案 > 将 NA 值从 r 加载到 sql

问题描述

我正在尝试将数据帧从 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))

表模式:student_score 列名称 (varchar)、student_id (int) 和 score (int)

代码:

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

标签: mysqlr

解决方案


在您的代码NA中被翻译为"NA". 您需要全部'NA'替换sendNULL. 只需在最后添加以下代码 -

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')"

推荐阅读