我需要处理一个.csv文件,它看起来像这样:
"IDEA ID,""IDEA TITLE"",""VOTE VALUE"""
"56144,""Net Present Value PLUS (NPV+)"",1"
"56144,""Net Present Value PLUS (NPV+)"",1"
如果我使用read.csv,我得到的是一个只有一个变量的数据框。我需要一个有三列的数据框,其中每一列由逗号分隔。如何处理行首和行尾的引号?
我需要处理一个.csv文件,它看起来像这样:
"IDEA ID,""IDEA TITLE"",""VOTE VALUE"""
"56144,""Net Present Value PLUS (NPV+)"",1"
"56144,""Net Present Value PLUS (NPV+)"",1"
如果我使用read.csv,我得到的是一个只有一个变量的数据框。我需要一个有三列的数据框,其中每一列由逗号分隔。如何处理行首和行尾的引号?
我认为在不先去掉初始和终止引号的情况下,没有简单的方法来实现这一点。如果您的系统上有sed
(Unix [Linux/MacOS]或Windows+Cygwin?),那么
read.csv(pipe("sed -e 's/^\"//' -e 's/\"$//' qtest.csv"))
应该可以工作。否则
read.csv(text=gsub("(^\"|\"$)","",readLines("qtest.csv")))
对于大文件而言,这种方法的效率可能会稍低(在处理之前必须将整个文件读入内存),但应该可以在任何地方使用。
(也许有一种方法可以像第二个示例那样使用括号来进行 sed
的正则表达式,使其更加紧凑,但我已经厌倦了尝试弄清楚 所有反斜杠所属的位置。)
""IDEA TITLE""
。这些引号不会搞砸事情吗? - MrFlicksed
的答案可能会更快,如果有sed
的话... - Ben Bolker"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))))
read.csv
的quote
选项。 - user3710546