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}
答案 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