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