【问题标题】:Loading csv into R with `sep=,` as the first line使用 `sep=,` 作为第一行将 csv 加载到 R 中
【发布时间】:2016-06-22 21:23:41
【问题描述】:

我从 (PowerBI) 导出数据的程序将数据保存为 .csv 文件,但文件的第一行是 sep=,,然后文件的第二行有标题(列名)。

假 .csv 文件示例:

sep=,
Initiative,Actual to Estimate (revised),Hours Logged,Revised Estimate,InitiativeType,Client
FakeInitiative1 ,35 %,320.08,911,Platform,FakeClient1
FakeInitiative2,40 %,161.50,400,Platform,FakeClient2

我正在使用这个命令来读取文件:

initData <- read.csv("initData.csv",
                   row.names=NULL,
                   header=T,
                   stringsAsFactors = F)

但我不断收到错误消息,指出列数错误(因为它认为第一行告诉它列数)。

如果我改为使用header=F,则它会加载,但是当我使用names(initData) &lt;- initData[2,] 时,名称会包含空格和非法字符,它会破坏我的程序的其余部分。讨厌。

有谁知道如何告诉 R 忽略第一行?我可以在文本编辑器中进入 .csv 文件,然后在每次加载之前手动删除第一行(如果我这样做,一切正常)但是我必须导出一堆文件,这有点愚蠢又乏味。

任何帮助将不胜感激。

【问题讨论】:

  • 尝试 skip=1(read.csv 的额外参数) - 这将跳过第一行
  • 它不会“认为第一行告诉它列数”——它只是希望所有行都有相同的列数。
  • 参见data.table::fread,它尝试按默认预期读取数据。

标签: r csv read.csv


【解决方案1】:

有很多方法可以做到这一点。这是一个:

all_content = readLines("initData.csv")
skip_first_line = all_content[-1]
initData <- read.csv(textConnection(skip_first_line),
                   row.names=NULL,
                   header=T,
                   stringsAsFactors = F)

【讨论】:

  • 优秀。令我震惊的是,我还可以构建一个if 命令来检查第一行是否确实是sep=,,然后再跳过它。谢谢。
【解决方案2】:

您的文件可能采用 UTF-16 编码。请参阅hrbrmstr's answer 了解如何读取 UTF-16 文件:

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2016-09-01
    • 1970-01-01
    • 2017-12-13
    • 2017-10-03
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多