【问题标题】:The woes of endless columns in .csv data in RR中.csv数据中无尽列的困境
【发布时间】:2014-02-20 18:02:07
【问题描述】:

所以我有一堆模拟输出的 .csv 文件。我正在编写一个 R 脚本来运行它们并在每个 .csv 文件中制作一个列的直方图。但是,.csv 的编写方式使 R 不喜欢它。当我测试它时,我最初是在 Excel 中打开文件,显然这将格式更改为 R 喜欢的格式。然后当我回去在整个文件夹上运行脚本时,我发现 R 不喜欢这种格式。 我正在阅读以下数据:

x <- read.csv("synch-imit-characteristics-2-tags-2-size-200-cost-0.1run-2-.csv", strip.white=TRUE)

Error in read.table(test, strip.white = TRUE, header = TRUE) : 
  more columns than column names

调查后,我发现 R 不喜欢的原始 .csv 文件看起来与我用 excel 打开的测试文件不同。我在记事本中打开后复制并粘贴了下面的第一位:

cost,0.1

mean-loyalty, mean-hospitality

0.9885449527316088, 0.33240076252915735

weight,1 of p1, 2 of p1,

但是,在记事本中,没有明显的格式。事实上,行之间根本没有空间,即成本,0.1mean-loyalty,mean-hospitality0.988544 等。所以我也很奇怪,当我从记事本处理并粘贴它时,它会得到所需的格式如上。无论如何,继续前进,在我用excel打开它之后,它被转移到这个“

cost,0.1,,,,,,,,

mean-loyalty, mean-hospitality,,,,,,,,

0.989771257,0.335847092,,,,,,,,

weight,1 of p1, etc...

所以看起来数据最初在行之间没有分隔(但我不知道 excel 是如何计算出来的,或者复制和粘贴它),但 R 没有接受这一点。相反,它将所有内容视为一行(并且由于我有 40,000 多行,因此它没有那么多列)。我不想在 excel 中打开和保存每个文件。有没有办法让 R 根据需要读取数据?

因为当我从记事本复制并粘贴它时,它的行有新行,似乎我只需要 R 来读取它,知道逗号分隔同一行上的列,并且返回分隔行。我试着弄乱我能找到的所有 sep="" 命令。但我想不通。

【问题讨论】:

  • 如果没有其中一个(未修改,未在 Excel 中打开)文件,将很难提供帮助。你能以某种方式提供一个链接吗?
  • header=F 工作吗?
  • 你的 R 版本是什么?

标签: r csv


【解决方案1】:

首先解决记事本问题:

行之间必须有 CR(回车,\r)字符(并且没有 LF,\n 字符,导致记事本将其视为一行)。 有些程序接受这个以及换行符,有些则不接受。

例如,您可以使用Notepad++ 将所有“\r”替换为“\n”或“\r\n”,使用“扩展”选项替换。首先选择 View > Show Symbol > Show all characters,看看你在做什么。

最后,回到 R:

(如前所述,R实际上可以将CR作为换行符处理)

read.csv 假定您在第一行中有非空标题名称,但实际上您有:

cost,0.1

在稍后的数据中,您有一行不止两列:

weight,1 of p1, 2 of p1,

这意味着并非所有列都有标题名称(我想知道 0.1 是否应该是标题名称)。

两种解决方案可以是:

  1. 添加包含所有列的标题,或
  2. 正如评论中指出的那样,使用 header=F

【讨论】:

  • R 接受 '\n' 或 '\r\n' 作为有效的行终止符。如果这是答案,我会感到惊讶。请参阅scan的帮助页面
  • 你是对的:这只是记事本部分的答案,否则标题会丢失。我会修改我的答案。
猜你喜欢
  • 2012-12-15
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多