【问题标题】:CSV file import in R [closed]R中的CSV文件导入[关闭]
【发布时间】:2015-03-17 12:59:30
【问题描述】:

我正在尝试将 CSV 文件导入 R 以使用线性/逻辑回归进行欺诈分析。本来应该很简单的事情现在变得复杂了……这个数据集包含 26 个变量和超过 200 万行。我使用此命令行导入 CSV 文件:

data <- read.csv('C:/Users/amartinezsistac/OneDrive/PROYECTO/decla_cata_filtrados.csv',header=TRUE,sep=";")

尽管如此,R 仅在 1 个变量中导入了 230 万行。我附上此步骤后获得的View(data) 的 以获取更多信息。我试过从 sep=";" 切换到 sep="," 使用:

datos <- read.csv('C:/Users/amartinezsistac/OneDrive/PROYECTO/decla_cata_filtrados.csv',header=TRUE,sep=",")

但收到此错误消息:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names

我尝试将 read.csv 更改为 read.csv2(230 万行和 1 个变量作为结果);或使用 fill=TRUE 选项(结果相同),但导入不正确。我附上了在 Excel 中打开的原始 CSV 外观的另一张图片。

我提前感谢任何建议或帮助解决它。

【问题讨论】:

  • 检查你的分隔符。
  • 嗨@Avinash,感谢您的回复。通过检查分隔符,您到底指的是什么?我用过 sep=";"和 sep="," 两者。在第一种情况下,R 将其作为 1 个变量导入,在第二种情况下,它向我显示错误“列多于列名”
  • 尝试使用 quote = "" 禁用引号 - 查看 ?read.table?scan 的文档以获取其他替代方法。我假设问题在于嵌入的引号。请参阅我的回答 here 以获得类似的问题和答案。
  • 请不要通过 stackoverflow 以外的任何方式共享您的数据。删除屏幕截图并将前三行左右的数据添加为原始帖子中的代码块。也可以考虑使用read.table()
  • 感谢您和@zx8754 的回复。我无法共享文件的原因是因为数据的机密性。这就是我使用屏幕截图的原因,尽管我知道在这些情况下共享文件是应该做的。谢谢。

标签: r csv import read.csv


【解决方案1】:

将问题分解为您可以检查的步骤 - 最初我会尝试类似

file <- 'C:/Users/amartinezsistac/OneDrive/PROYECTO/decla_cata_filtrados.csv'
read.csv(file, header=F, skip=1, sep=',', nrow=1)

如果这会生成一个包含 1 行和 26 列的 data.frame,则说明您在做生意,如果没有,请再次检查 read.csv 的参数,看看是否需要为您的文件更改任何参数。

现在进行到

read.csv(file, header=T, skip=0, sep=',', nrow=1)

这应该为您提供相同的一行 data.frame,但列名正确 - 如果不检查 csv 文件在第一行中的列数是否正确,或者继续跳过标题并在您之后分配列名已经读过了。

现在增加nrow,最初增加到 10,然后可能增加 10 倍,直到您读入整个文件,或者遇到问题。使用二分搜索来查找导致问题的确切行,方法是将 nrow 设置为您知道有效的值与找到确切问题行之前无效的值之间的一半。

请参阅 Excel 中的 csv 以了解此行的特殊之处 - 它是否有奇怪的字符、不匹配的引号、较少的条目...这将影响您解决问题的方式。

重复直到读入整个文件!

【讨论】:

  • 感谢@Miff 的时间和回复。您的建议也适用于这种情况。正如告诉 xraynaud 的那样,原因是分隔符“,”与其他带有逗号的变量(如“地址”等)混淆了。将分隔符更改为管道“|”后R终于可以阅读了。也感谢您的时间和关注。
【解决方案2】:

从excel截图来看,你文件的第一行数据有31列;第二个有 29... 我的猜测是你的 csv 文件有一个逗号作为列分隔符和一个逗号作为小数点分隔符。您必须通过使小数点和列分隔符不同来将文件重新导出到 csv。

【讨论】:

  • 感谢@xraynaud 的回复。未导入文件的原因是分隔符“,”与“地址”等单元格中带有逗号的不动产变量混淆了。在要求将分隔符更改为管道“|”之后R终于可以阅读了。感谢您的时间和回复。
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2021-05-19
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
相关资源
最近更新 更多