R导入csv,标题上缺少逗号

Posted

技术标签:

【中文标题】R导入csv,标题上缺少逗号【英文标题】:R importing csv with comma missing on header 【发布时间】:2014-02-19 07:19:25 【问题描述】:

在 R 中,我导入的 csv 文件在标题行的末尾缺少逗号。我每天都下载新文件,所以我想弄清楚如何在 R 中解决问题,而不是每次都编辑文件。这是一个例子。

head1,head2,head3"dat1","dat2","123","dat1b","dat2b","456"

文件似乎对所有数据都有引号,而不仅仅是字符串。我使用的导入方式是:

mydata <-read.csv('mycsv.csv', stringsAsFactors=FALSE)

可能我可以找到第一个引号并在它之前插入一个逗号。

提前致谢

【问题讨论】:

缺少逗号,还是缺少换行符? 页眉的元素是否也被引用了?所有文件的标题都相同吗? 标题不在引号中,元素在引号中。我不确定它是否缺少逗号或换行符。我该如何检查? -谢谢 当我在记事本和写字板中打开文件时,不会呈现新行。 您可以在某处(Dropbox 或其他)上传示例文件并包含链接吗? 【参考方案1】:

这可能不是最优雅的解决方案,但可能就足够了。

首先,阅读整行而不是试图直接解释为 csv。我在第一个代码块中使用了textConnection,您可以提供文件路径或 url,例如readLines('/path/to/my/strange.csv').

tmp <- readLines(textConnection('head1,head2,head3"dat1","dat2","123"
"dat3","dat4","456"
"dat5","dat6","789"
"dat7","dat8","012"
"dat9","dat10","345"
"dat11","dat12","678"'))

然后对第一行进行一点操作:

h <- sub('\".*', '', tmp[1]) # extracts the headers from the first line
row1 <- sub('[^\"]*(.*)', '\\1', tmp[1]) # extracts the first row's data
tmp <- c(row1, tmp[-1]) # combines the first row's data with subsequent rows' data

现在解释为 csv:

dat <- read.csv(textConnection(tmp), header=FALSE) # read tmp in as a csv
names(dat) <- strsplit(h, ',')[[1]] # add headers

dat

  head1 head2 head3
1  dat1  dat2   123
2  dat3  dat4   456
3  dat5  dat6   789
4  dat7  dat8    12
5  dat9 dat10   345
6 dat11 dat12   678

【讨论】:

这些文件的标题太多,而且它们各不相同,所以我无法指定标题名称。感谢您的尝试! 您不需要使用这种方法指定标题名称。它们是用正则表达式提取的。这里的模式将第一行中的所有内容直到第一个",并假设它构成了标题。它还假设标题是逗号分隔的(没有最后的逗号)。试试看 好的,我会试试看,我一定会回来的。谢谢 您为我指明了正确的方向,因为文件现在已导入并且标题 (h) 是正确的。但我对潜艇有一些问题,所有数据都有额外的引号和斜杠。我应该能够解决这个问题,这可能是由于我没有正确解释文件。我稍后会回到这篇文章。谢谢。 row1tmp 看起来像 "\"dat1\",\"dat2\",\"123\"",但 read.csv 应该处理这个问题,dat 应该看起来不错。如果您仍然遇到问题,请告诉我,我会相应地编辑帖子。【参考方案2】:

你可以试试

data=scan(file.choose(),"")

【讨论】:

以上是关于R导入csv,标题上缺少逗号的主要内容,如果未能解决你的问题,请参考以下文章

从 CSV 文件导入包含逗号的变量

删除逗号,它是 R 中的千位分隔符

必要时使用正则表达式向 csv 文件添加逗号

从 CSV 导入列并替换逗号

将 csv 文件导入数据库 - 带逗号的值

导入 CSV 文件时处理逗号和撇号