将NA替换为NULL以便将其输入到PostgreSQL中。

5
我试图用NULL替换NA值。原因是我需要将numeric值输入到PostgreSQL数据库中,但不断收到错误消息:ERROR: Invalid input syntax for type numeric ""
我已经尝试过将值设置为NA、空字符串''"NULL"(作为字符串)。但这些都没有起作用。
df = data.frame(x=c('a', 'b', 'c', 'd', 'e'), y=c(1, 2, 3, NA, 5))
df[is.na(df)] = "NULL"
df[is.na(df)] = ""

在原子向量中,如果存在其他非空元素,则不能将NULL作为元素。 NULL长度为零,因此将从向量中删除它,或者在赋值时触发错误。 为什么不能使用NA?该列类仍然是数字类型。 - Rich Scriven
你是如何将数据框导入数据库的?使用RODBC吗?如果是这样,sqlSave()可以从数据框创建表,并将NA处理为NULL。 - Parfait
我只是手动导入csv文件,现在我会尝试使用sqlSave()方法。 - jdesilvio
1个回答

3
如果您的表格使用的是numeric,那么将NA转换为NaN应该可以正常工作。除了NaNnumericdecimalfloat也支持NaN(请参阅Postgres文档)。
如果您的数据类型不同,例如integer,则可以使用nullifNaN强制转换为NULL
nullif(y, 'NaN')

同样适用于布尔/逻辑类型,首先将逻辑类型转换为字符类型,y = as.character(mybool),然后在SQL中使用:对于NA,使用nullif(y, 'NA')::boolean,对于空白/空值(例如未设置的闪亮输入),使用nullify(y, '')::boolean - Brian D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接