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}发布于 2016-02-15 17:40:45
如果您只想在转储中使用字符串表示,请在子查询中使用array_to_string()并连接修饰符:
COPY (SELECT name, 'c(' || array_to_string(numbers, ',') || ')' AS numbers
FROM tbl) TO '/path/to/target.sql';发布于 2016-02-15 23:33:39
通过将注释字符设置为"-"来读取消除虚线行中的数据,删除括号并拆分提供列表的数字,将名称分配给每个提供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))https://stackoverflow.com/questions/35405549
复制相似问题