首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有嵌入引号的csv文件读入R

将带有嵌入引号的csv文件读入R
EN

Stack Overflow用户
提问于 2014-07-09 14:53:23
回答 2查看 3.3K关注 0票数 3

我必须处理如下所示的.csv文件:

代码语言:javascript
复制
"IDEA ID,""IDEA TITLE"",""VOTE VALUE"""
"56144,""Net Present Value PLUS (NPV+)"",1"
"56144,""Net Present Value PLUS (NPV+)"",1"

如果我使用read.csv,我会得到一个只有一个变量的数据帧。我需要的是一个有三列的数据框,其中列由逗号分隔。如何处理行首和行尾的引号?

EN

回答 2

Stack Overflow用户

发布于 2014-07-09 23:55:40

我认为,如果不先去掉引号的首引号和尾引号,就不会有简单的方法来做到这一点。如果您的系统上安装了sed (Unix、Linux/MacOS或Windows+Cygwin?)然后

代码语言:javascript
复制
read.csv(pipe("sed -e 's/^\"//' -e 's/\"$//' qtest.csv"))

应该行得通。否则

代码语言:javascript
复制
read.csv(text=gsub("(^\"|\"$)","",readLines("qtest.csv")))

对于大文件来说效率有点低(在处理它之前你必须读入整个文件),但应该在任何地方都能工作。

(可能有一种方法可以使用第二个示例使用的括号以相同的、更紧凑的形式为sed生成正则表达式,但是我厌倦了对where all the backslashes belonged进行排序。)

票数 0
EN

Stack Overflow用户

发布于 2015-10-09 16:55:49

我建议删除首引号/尾引号,并将背靠背的双引号改为单双引号。后者在某些字符串本身包含逗号的情况下至关重要,例如

代码语言:javascript
复制
"1,""A mostly harmless string"",11"
"2,""Another mostly harmless string"",12"
"3,""These, commas, cause, trouble"",13"

由于read.csv()函数将最后一行中的所有逗号解释为值分隔符,因此只删除首引号/末尾引号而保留连续引号将导致生成6个变量。因此,完整的代码可能如下所示:

代码语言:javascript
复制
data.text <- readLines("fullofquotes.csv")  # Reads data from file into a character vector.
data.text <- gsub("^\"|\"$", "", data.text) # Removes initial/terminal quotes.
data.text <- gsub("\"\"", "\"", data.text)  # Replaces "" by ".
data <- read.csv(text=data.text, header=FALSE)

或者,当然,都在一行中

代码语言:javascript
复制
data <- read.csv(text=gsub("\"\"", "\"", gsub("^\"|\"$", "", readLines("fullofquotes.csv", header=FALSE))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24647108

复制
相关文章

相似问题

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