我试图使用this file (3.8mb)的固定宽度结构(如the following link中所描述的那样)来读取它。
这个命令:
a <- read.fwf('~/ccsl.txt',c(2,30,6,2,30,8,10,11,6,8))产生一个错误:
第37行没有10个元素
在用skip选项的不同值复制了这个问题之后,我认为导致问题的行都包含"#“符号。
有什么办法可以绕过它吗?
发布于 2011-12-26 10:28:05
正如@jverzani已经评论过的那样,这个问题可能是#符号经常用作字符来表示注释的事实。将read.fwf的read.fwf输入参数设置为#以外的其他参数可以解决问题。我将在下面将我的答案作为一个更一般的例子,您可以在任何导致问题的字符上使用(例如,荷兰城市名称's中的's Gravenhage)。
我在其他符号上也遇到过这个问题。我采用的方法是简单地将#替换为nothing,或者用不生成错误的字符替换。在我的例子中,简单地替换字符是没有问题的,但在您的情况下,这可能是不可能的。
所以我的方法是删除产生错误的符号,或者用另一个字符替换。这可以使用文本编辑器(查找和替换)、R脚本,或者使用一些名为grep和sed的linux工具来完成。如果您想在R脚本中这样做,请使用scan或readLines来读取这些行。一旦文本在内存中,您可以使用sub替换字符。
如果不能替换字符,我将尝试以下方法:将字符替换为不产生错误的字符,使用read.fwf将其读入R中,最后用#字符替换字符。
发布于 2011-12-26 19:27:53
接下来是上面的答案:要让所有字符都被读成文字,请同时使用comment.char=""和quote="" (后者处理@PaulHiemstra在荷兰语专有名词中的单引号的问题)在read.fwf的调用中(这在?read.table中有记录)。
https://stackoverflow.com/questions/8634506
复制相似问题