我必须处理如下所示的.csv文件:
"IDEA ID,""IDEA TITLE"",""VOTE VALUE"""
"56144,""Net Present Value PLUS (NPV+)"",1"
"56144,""Net Present Value PLUS (NPV+)"",1"如果我使用read.csv,我会得到一个只有一个变量的数据帧。我需要的是一个有三列的数据框,其中列由逗号分隔。如何处理行首和行尾的引号?
发布于 2014-07-09 23:55:40
我认为,如果不先去掉引号的首引号和尾引号,就不会有简单的方法来做到这一点。如果您的系统上安装了sed (Unix、Linux/MacOS或Windows+Cygwin?)然后
read.csv(pipe("sed -e 's/^\"//' -e 's/\"$//' qtest.csv"))应该行得通。否则
read.csv(text=gsub("(^\"|\"$)","",readLines("qtest.csv")))对于大文件来说效率有点低(在处理它之前你必须读入整个文件),但应该在任何地方都能工作。
(可能有一种方法可以使用第二个示例使用的括号以相同的、更紧凑的形式为sed生成正则表达式,但是我厌倦了对where all the backslashes belonged进行排序。)
发布于 2015-10-09 16:55:49
我建议删除首引号/尾引号,并将背靠背的双引号改为单双引号。后者在某些字符串本身包含逗号的情况下至关重要,例如
"1,""A mostly harmless string"",11"
"2,""Another mostly harmless string"",12"
"3,""These, commas, cause, trouble"",13"由于read.csv()函数将最后一行中的所有逗号解释为值分隔符,因此只删除首引号/末尾引号而保留连续引号将导致生成6个变量。因此,完整的代码可能如下所示:
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)或者,当然,都在一行中
data <- read.csv(text=gsub("\"\"", "\"", gsub("^\"|\"$", "", readLines("fullofquotes.csv", header=FALSE))))https://stackoverflow.com/questions/24647108
复制相似问题