当前位置: 首页 > 知识库问答 >
问题:

使用read。csv,但保留引号

苏伟志
2023-03-14

我试图读取一个带有引号的csv文件

 id, value, other
 1, "("a"="b", "b"="c", "c"="d")", 2
 2, "("a"="b", "b"="c", "c"="d")", 3

阅读csv删除了引号,因此我最终得到了

 id, value, other
 1, (a=b, b=c, c=d), 2
 2, (a=b, b=c, c=d), 3

有人知道我如何保留引号吗?

共有2个答案

潘泰
2023-03-14

也许这有助于:

library(readr)

# simulating your data
id <- c(1,2)
value <- c('"("a"="b", "b"="c", "c"="d")"', '"("a"="b", "b"="c", "c"="d")"')
other <- c(2,3)

# creating a dataframe 
df <- data.frame(id, value, other)

# creating a csv file
write.csv(df,"mydata.csv", row.names = FALSE)

# Import csv dataset
mydata <- read_csv("mydata.csv")

# View data
View(mydata)
仲孙经赋
2023-03-14

一种方法是改变分隔符。

我们可以将分隔符更改为其他分隔符,并使用fread。

data.table::fread(gsub(',(?![^\\(]*\\))', ';', text, perl = TRUE), quote = '')

#   id                         value other
#1:  1 "("a"="b", "b"="c", "c"="d")"     2
#2:  2 "("a"="b", "b"="c", "c"="d")"     3

gsub的正则表达式已从这里获取,以替换()之间不出现的逗号。

数据

text = 'id, value, other
 1, "("a"="b", "b"="c", "c"="d")", 2
 2, "("a"="b", "b"="c", "c"="d")", 3'
 类似资料:
  • 如果你默认使用Markdown编辑器编辑文档,但是文字中存在一些 Markdown 的保留字。 例如: 表中中出现 | 需要输入 ` 需要成对的出现 [ ] >和<也是需要转义后才能显示。 等等,一些特殊需求。可以通过unicode编码来解决。 将要输入的字符进行转义,之后使用转义字符即可。 常见转义字符: 原字符 转义字符 | | ` ` ] ] [ [ > &gt; < &lt; @ @ #

  • 全部的 我正在处理一个看似简单的案例,但它提出了一些设计挑战: 有一个带有客户端的本地参与者系统,它可以连接到运行大部分业务逻辑的远程系统。 远程系统将有一个固定的IP地址、端口等-因此,可以使用context.actorSelection(uri)策略来获取ActorRef,以获取当前参与者(或路由器后面的一组路由器)的化身。 作为服务器的远程系统不应该知道客户端的位置。 鉴于此,将消息从客户端

  • 我想从CSV文件中删除包含错误日期的行。在这个过程中,CSV文件应该保留头行。所有这些我都希望使用Java8 Streams来执行。 一开始我想到了这个:

  • 问题内容: 我想使用在NodeJS 0.12中添加的方法,但仍然在运行Node脚本的控制台窗口中具有输出。 例如,如果我运行具有以下行的NodeJS脚本,我想在控制台中看到rsync命令“ live”的完整输出: 我知道这会返回命令的输出,执行后我可以将其输出到控制台,但是这样我就没有“实时”输出了…… 问题答案: 您可以根据需要将父级的stdio传递给子进程:

  • 用户提交表单后如何保留他们的输入? 例如: 如果用户键入 fname 和 lname,是的,它会回显出来。但是我想在输入类型中保留他们的名字和姓氏,这样如果表单很长,用户就不需要再次填写。

  • 问题内容: 我正在制作一个bash脚本,该脚本将打印并将复杂的参数传递给另一个外部程序。 我该如何打印原始参数: 使用并删除可能引起不良结果的单引号。我的脚本不需要解析每个参数。我只需要打印/记录参数字符串,然后将其确切地传递给另一个程序。 我知道我可以使用类似的东西来避免引号, 但是我不能保证用户会这样做。 问题答案: 在将参数传递到脚本之前,引号已被删除,因此保留它们为时已晚。您可以做的是在将