我必须使用这样的.csv文件:
"IDEA ID,""IDEA TITLE"",""VOTE VALUE"""
"56144,""Net Present Value PLUS (NPV+)"",1"
"56144,""Net Present Value PLUS (NPV+)"",1"
如果我使用read.csv,我会获得一个带有一个变量的数据框。我需要的是一个包含三列的数据框,其中列以逗号分隔。如何在行的开头和行的末尾处理引号?
答案 0 :(得分:0)
我不认为在没有首先剥离初始和终端引号的情况下,这将是一种简单的方法。如果您的系统上有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 。)
答案 1 :(得分:0)
我建议删除初始/终端引号并将背靠背双引号转换为单引号。如果某些字符串本身包含逗号,则后者至关重要,如
"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))))