将csv转储中的postgres数组转换为vector

时间:2016-02-15 09:24:06

标签: r postgresql

csv转储中的postgres数组看起来像这样{1,2,3} 花括号内的值。

因此,使用表csv转储可能看起来像这样,

name      numbers
----     -------
john     {1,2,3}
me       {5,6}

如何将数字列转换为矢量?

{1,2,3} -->c(1,2,3)
{5,6}  ->c(5,6}

2 个答案:

答案 0 :(得分:1)

如果您只想在转储中使用字符串表示,请在子查询中使用array_to_string()并连接装饰器:

COPY (SELECT name, 'c(' || array_to_string(numbers, ',') || ')' AS numbers
      FROM tbl) TO '/path/to/target.sql';

答案 1 :(得分:1)

通过将注释字符设置为"-"来读取删除虚线的数据,删除括号并拆分给出列表的数字,为每个列表组件指定名称L并使用{ {1}}获得长篇大论。最后将其设置为数据框并将数字转换为数字。没有包使用。

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