" readTableHeader找到的不完整的最后一行"在带有中文字符

时间:2015-06-09 04:49:21

标签: r csv character-encoding chinese-locale

我得到了这个"由readTableHeader"找到的不完整的最后一行使用read.delim()读取制表符分隔的文本文件时出现错误消息。标题和内容中有繁体中文字符,因此我已经在使用其他编码,如下所示:

kg = read.delim("KG_EDB_20150505.csv",fileEncoding="UTF-16LE")

Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'KG_EDB_20150505.csv'

我已阅读其他类似问题的帖子,例如:

'Incomplete final line' warning when trying to read a .csv file into R In read.table(): incomplete final line found by readTableHeader

但不幸的是,这些帖子中建议的解决方案无法解决问题。

所尝试内容的摘要等:

  1. 在文本文件的最后一行按ENTER:同样的错误
  2. 将文本文件修剪为标题+ 1个数据,然后确保标题行和内容之间有一个新行(ENTER):相同错误
  3. 修剪文本文件,直到只剩下标题,然后将标题复制并粘贴到下一行,并使用它作为一行数据。在伪造的数据行之后添加一个新行(ENTER): WORKS!中文完全是垃圾,但不管怎样我都不需要。
  4. 删除#3中的尾随新行(ENTER):相同的错误,但可以将1行虚假数据读入data.frame。
  5. 直接在Excel中打开:工作,但不是我想要的工作流程。
  6. 那是什么给了什么?

    我可以在这样的文件中阅读吗?

    有没有办法按摩文件(最好是在R中),然后在里面阅读?

    文件在这里:

    https://dl.dropboxusercontent.com/u/5860015/KG_EDB_20150505.csv

    这是来自政府网页:

    http://www1.map.gov.hk/gih3/view/index.jsp
    (地图工具>资料下载>幼稚园暨幼儿中心)

    非常感谢提前!

    更新

    幸运的是,我在文本文件中隔离了一个有问题的字符,即这个中文字符"稚"。它可能不是唯一的,但如果我将它添加到#3中的文件,则会再次出现相同的错误。我不知道这个角色有什么特别之处,我不需要中文文本文件中的任何信息。

    现在还有更多问题:

    1. 有没有办法跳过阅读这个有问题的人物?
      1. 在阅读文本文件之前,R中有没有办法替换文件中的这个有问题的字符?

1 个答案:

答案 0 :(得分:0)

它充满了汉字(事实上每隔一个字段)。

第一行:

“ENGLISH CATEGORY”“中文类别”“ENGLISH NAME”“中文名称”“ENGLISH ADDRESS”“中文地址”“LONGITUDE”“经度”“LATITUDE”“纬度”“EASTING”“坐标东”“NORTHING”“坐标北“”STUDENTS GENDER“”就读学生性别“”SESSION“”学校授课时间“”DISTRICT“”分区“”财务类型“”资助种类“”学校级别“”学校类型“”开放时间“”开放时间“ “TELEPHONE”“联络电话”“FAX NUMBER”“传真号码”“EMAIL ADDRESS”“电邮地址”“网站”“网页”“宗教”“宗教”

我的编辑认为它是UTF-16,它是“Little Endian”。

除非您使用正确的字体进行设置并了解编码的细节,否则使用外部编辑器要容易得多,特别是因为您说您不想要中文字段中的信息。我成功使用了Bare Bones Software的TextWrangler编辑器。它是更全功能编辑器的免费版本,但它有能力删除非ASCII字符并保存为UTF-8编码文件。

> inp <- read.table("~/Downloads/KG_EDB_20150505.txt", header=TRUE)
> str(inp)
'data.frame':   1385 obs. of  36 variables:
 $ ENGLISH.CATEGORY: Factor w/ 1 level "Kindergartens": 1 1 1 1 1 1 1 1 1 1 ...
 $ X               : logi  NA NA NA NA NA NA ...
 $ ENGLISH.NAME    : Factor w/ 1368 levels "A-ONE KINDERGARTEN",..: 137 38 835 714 858 551 455 533 1073 396 ...
 $ X.1             : Factor w/ 68 levels "","-()","()",..: 5 3 3 5 3 3 3 3 3 3 ...
 $ ENGLISH.ADDRESS : Factor w/ 562 levels "(INCLUDING 1-STOREY SCHOOL EXTENSION) 23 NAM LONG SHAN ROAD ABERDEEN HONG KONG",..: 448 40 34 316 396 55 326 160 273 483 ...
 $ X.2             : Factor w/ 294 levels "","()","()29",..: 257 1 21 1 1 112 1 59 1 289 ...
 $ LONGITUDE       : Factor w/ 416 levels "113-51-49","113-51-54",..: 101 302 406 60 314 167 189 104 330 363 ...
 $ X.3             : Factor w/ 416 levels "113-51-49","113-51-54",..: 101 302 406 60 314 167 189 104 330 363 ...
 $ LATITUDE        : Factor w/ 397 levels "22-12-36","22-13-10",..: 150 257 139 357 388 139 167 160 383 377 ...
 $ X.4             : Factor w/ 397 levels "22-12-36","22-13-10",..: 150 257 139 357 388 139 167 160 383 377 ...
 $ EASTING         : num  836221 828924 834914 818325 828492 ...
 $ X.5             : num  836221 828924 834914 818325 828492 ...
 $ NORTHING        : num  821002 826433 820623 835893 840814 ...
 $ X.6             : num  821002 826433 820623 835893 840814 ...
 $ STUDENTS.GENDER : Factor w/ 2 levels "CO-ED","GIRLS": 1 1 1 1 1 1 1 1 1 1 ...
 $ X.7             : logi  NA NA NA NA NA NA ...
 snipped.

标题中包含中文的字段现在都是空白的。它不是一个csv文件....没有逗号。如果我为自己再做一次,我会使用stringsAsFactors =FALSE

也可以使用正确的编码输入文件。这适用于原始文件,根本不进行编辑:

> inp2 <- read.table("~/Downloads/KG_EDB_20150505.csv", header=TRUE, fileEncoding="UTF-16")
> str(inp2)
'data.frame':   1385 obs. of  36 variables:
 $ ENGLISH.CATEGORY: Factor w/ 1 level "Kindergartens": 1 1 1 1 1 1 1 1 1 1 ...
 $ 中文類別        : Factor w/ 1 level "幼稚園": 1 1 1 1 1 1 1 1 1 1 ...
 $ ENGLISH.NAME    : Factor w/ 1368 levels "A-ONE KINDERGARTEN",..: 137 38 835 714 858 551 455 533 1073 396 ...
 $ 中文名稱        : Factor w/ 1355 levels "","DISCOVERY BAY INTERNATIONAL SCHOOL (A.M.)",..: 1186 507 854 630 64 134 1298 147 520 1256 ...
 $ ENGLISH.ADDRESS : Factor w/ 562 levels "(INCLUDING 1-STOREY SCHOOL EXTENSION) 23 NAM LONG SHAN ROAD ABERDEEN HONG KONG",..: 448 40 34 316 396 55 326 160 273 483 ...
 $ 中文地址        : Factor w/ 554 levels "34 PRICE ROAD HONG KONG",..: 32 395 51 259 173 37 58 28 176 370 ...
 $ LONGITUDE       : Factor w/ 416 levels "113-51-49","113-51-54",..: 101 302 406 60 314 167 189 104 330 363 ...
 $ 經度            : Factor w/ 416 levels "113-51-49","113-51-54",..: 101 302 406 60 314 167 189 104 330 363 ...
 $ LATITUDE        : Factor w/ 397 levels "22-12-36","22-13-10",..: 150 257 139 357 388 139 167 160 383 377 ...
 $ 緯度            : Factor w/ 397 levels "22-12-36","22-13-10",..: 150 257 139 357 388 139 167 160 383 377 ...
 $ EASTING         : num  836221 828924 834914 818325 828492 ...
 $ 坐標東          : num  836221 828924 834914 818325 828492 ...
 $ NORTHING        : num  821002 826433 820623 835893 840814 ...
 $ 坐標北          : num  821002 826433 820623 835893 840814 ...
snipped.