首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将csv转储中的postgres数组转换为向量

将csv转储中的postgres数组转换为向量
EN

Stack Overflow用户
提问于 2016-02-15 17:24:06
回答 2查看 715关注 0票数 1

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

因此,表csv转储可能如下所示,

代码语言:javascript
运行
复制
name      numbers
----     -------
john     {1,2,3}
me       {5,6}

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

代码语言:javascript
运行
复制
{1,2,3} -->c(1,2,3)
{5,6}  ->c(5,6}
EN

回答 2

Stack Overflow用户

发布于 2016-02-15 17:40:45

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

代码语言:javascript
运行
复制
COPY (SELECT name, 'c(' || array_to_string(numbers, ',') || ')' AS numbers
      FROM tbl) TO '/path/to/target.sql';
票数 1
EN

Stack Overflow用户

发布于 2016-02-15 23:33:39

通过将注释字符设置为"-"来读取消除虚线行中的数据,删除括号并拆分提供列表的数字,将名称分配给每个提供L的列表组件,并使用stack获取长格式。最后,将其设置为数据框,并将数字转换为数字。不使用任何包。

代码语言:javascript
运行
复制
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)))

给予:

代码语言:javascript
运行
复制
  name number
1 john      1
2 john      2
3 john      3
4   me      5
5   me      6

如果name列不应该是一个因子,请将最后一行替换为:

代码语言:javascript
运行
复制
with(stack(L), 
 data.frame(name = format(ind), number = as.numeric(values), stringsAsFactors = FALSE))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35405549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档