首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在带有中文字符的制表符分隔文件上使用read.delim()时,使用“readTableHeader找到的不完整的最后一行”

在带有中文字符的制表符分隔文件上使用read.delim()时,使用“readTableHeader找到的不完整的最后一行”
EN

Stack Overflow用户
提问于 2015-06-08 20:49:20
回答 1查看 8.7K关注 0票数 0

在使用readTableHeader()读取标签分隔的文本文件时,我得到了以下错误消息:“read.delim找到了不完整的最后一行”。标题和内容中都有繁体汉字,因此我已经在使用替代编码,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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单个数据,然后确保标题和内容之间有一个新行(输入):相同的错误
  3. 微调文本文件,直到只剩下标题,然后将标题复制并粘贴到下一行,并使用它伪装成一行数据。在假数据行之后添加一个新行(ENTER):工作!中文都是垃圾,但无论如何我不需要这些。
  4. 删除#3中的新行(输入):相同的错误,但可以将1行假数据读入data.frame。
  5. 在Excel中直接打开:工作,但不是我想要的工作流程。

那是怎么回事?

我有办法在这样的文件里读到吗?

有没有办法按摩文件(最好是在R中),然后把它读进去?

文件在这里:

20150505.csv

这是来自一个政府网页:

http://www1.map.gov.hk/gih3/view/index.jsp

(地图工具>资料下载>幼稚园暨幼儿中心)

事先非常感谢!

更新:

幸运的是,我在文本文件中分离出一个冒犯的字符,即这个汉字"稚“。它可能不是唯一的一个,但是如果我将它添加到#3中的文件中,同样的错误会再次出现。我不知道这个字有什么特别之处,我也不需要任何中文文本文件中的信息。

所以现在还有更多的问题:

  1. 有什么方法可以跳过阅读这个冒犯的角色吗?

  1. 在读取文本文件之前,是否有方法在R中替换该文件中的这个冒犯字符?
EN

回答 1

Stack Overflow用户

发布于 2015-06-08 21:42:45

它充满了汉字(实际上是所有其他字段)。

第一行:

“英语类别”"中文類別“、"中文名稱”、“英语地址”、"中文地址“、”经度“、"經度”、“纬度”、"緯度“、"坐標東”、"坐標北“学生性别、"就讀學生性別”期、"學校授課時間“区"分區”“金融型”"資助種類“”学校级“"學校類型”“學校類型”"開放時間“”电话“"聯絡電話”“传真号码”"傳真號碼“”电子邮件地址“"電郵地址”网站"網頁“宗教”宗教“

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

除非您设置了正确的字体,并理解编码的整数,否则使用外部编辑器要容易得多,特别是因为您说您不需要中文字段中的信息。我成功地使用了来自Bare Bones软件的TextWrangler编辑器。这是他们更完整的编辑器的免费版本,但它有能力删除非ASCII字符,并保存为UTF-8编码文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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

还可以用正确的编码输入文件。这在没有编辑的情况下对原始文件起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30723230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文