csv转储中的postgres数组看起来像大括号内的{1,2,3} 值。将csv转储中的postgres数组转换为向量
因此,有表CSV转储可能是这样的,
name numbers
---- -------
john {1,2,3}
me {5,6}
如何转换的数字列向量?
{1,2,3} -->c(1,2,3)
{5,6} ->c(5,6}
csv转储中的postgres数组看起来像大括号内的{1,2,3} 值。将csv转储中的postgres数组转换为向量
因此,有表CSV转储可能是这样的,
name numbers
---- -------
john {1,2,3}
me {5,6}
如何转换的数字列向量?
{1,2,3} -->c(1,2,3)
{5,6} ->c(5,6}
如果你只是想在垃圾堆里的字符串表示,在子查询中使用array_to_string()
并连接所有的装饰:
COPY (SELECT name, 'c(' || array_to_string(numbers, ',') || ')' AS numbers
FROM tbl) TO '/path/to/target.sql';
不错的一个。我也在寻找一个一般的方法在R读取一旦csv已经制定。 – joseph
通过注释字符设置为"-"
阅读消除虚行的数据,删除括号并拆分给出列表的数字,将名称分配给每个列表组件,给出L
并使用stack
获取长表格。最后将其设置为数据框并将数字转换为数字。没有包被使用。
Lines <- "name numbers
---- -------
john {1,2,3}
me {5,6}"
DF <- read.table(text = Lines, header = TRUE, comment = "-", as.is = TRUE)
L <- setNames(strsplit(gsub("[{}]", "", DF$numbers), ","), DF$name)
with(stack(L), data.frame(name = ind, number = as.numeric(values)))
,并提供:
name number
1 john 1
2 john 2
3 john 3
4 me 5
5 me 6
如果name
列不应该是一个因素与替代的最后一行:
with(stack(L),
data.frame(name = format(ind), number = as.numeric(values), stringsAsFactors = FALSE))
'strsplit'可能会有所帮助在这里。 –
看起来像一个错字吗? ' - > c(5,6}' –
从R直接连接postgres可能更容易,启动本地pg实例,导入csv并从中读取所有数据可能更容易。保证从csv文件接收正确的数据集 –