热点新闻
R读入数据之read.table函数
2023-07-08 08:11  浏览:1759  搜索引擎搜索“富博农业网”
温馨提示:为防找不到此信息,请务必收藏信息以备急用! 联系我时,请说明是在富博农业网看到的信息,谢谢。
展会发布 展会网站大全 办理VIP 软文发布
写在最前:
  • read.table()函数适合读入文本文件储存的表格数据(*.txt *.csv *.xls等)
  • 看完解决90%读数据的问题:
    1.正常输入
    2.中文字符
    3.表头问题
    4.elements数不足
    5.缺失值

1.首先看一下正常的输入文件,需要重点关注

  • 是否含有表头
  • 表格的分隔符是什么





    一个普通的输入文件

df <- read.table(file = "grade.txt", sep = "\t", header = T) > df name Chinese Math English 1 zhang 98 78 56 2 Wang 78 27 88 3 Ming 84 29 45 4 Bai 100 93 75

  经过read.table()函数选择文件、设置分隔符、选择包含表头的操作,在R中得到了一个"正常"的数据框。

2.中文字符

  如果输入文件内容中含有中文,则会变成乱码




输入中含有中文

df <- read.table(file = "成绩.txt", sep = "\t", header = T) > df 濮撳悕 璇.枃 鏁板. 鑻辫. 1 鑰佸紶 98 78 56 2 鑰佺帇 78 27 88 3 灏忔槑 84 29 45 4 灏忕櫧 100 93 75

  更改参数fileEncoding设置为“UTF-8”编码可以完美解决

df <- read.table(file = "成绩.txt", sep = "\t", header = T, fileEncoding = "UTF-8") > df 姓名 语文 数学 英语 1 老张 98 78 56 2 老王 78 27 88 3 小明 84 29 45 4 小白 100 93 75

3.表头问题

  如果表头设置错了(明明有表头,读入的时候选择了没有),就会变成这样:

df <- read.table(file = "grade.txt", sep = "\t", header = F) > df V1 V2 V3 V4 1 name Chinese Math English 2 zhang 98 78 56 3 Wang 78 27 88 4 Ming 84 29 45 5 Bai 100 93 75

  可以看出read.table()输出的数据框会自动添加列名:V1、V2、V3···

  但如果很不幸,你的输入数据表头含有以下奇怪字符,像这样:




奇怪表头

df <- read.table(file = "grade.txt", sep = "\t", header = T) > df name Chinese.1 Chinese.2 Chinese.3 1 zhang 98 78 56 2 Wang 78 27 88 3 Ming 84 29 45 4 Bai 100 93 75

  由于read.table函数会自动check列名,因此奇怪的列名会变得规范很多。但更规范的列名有可能和你的预期不一致,比如你就想保留这些奇怪的字符。

  将check.names参数设置为FALSE,把这个功能关掉

df <- read.table(file = "grade.txt", sep = "\t", header = T, check.names = F) > df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 27 88 3 Ming 84 29 45 4 Bai 100 93 75

4.报错:某行elements数不足

  有时候文件看着没啥问题,却出现以下类似错误




元素数不足


原因1:有的内容含有#




输入含有#

  由于read.table()函数会默认把#后面的字符识别为注释,使用comment.char = ""禁用该功能。

df <- read.table(file = "grade.txt", sep = "\t", header = T, check.names = F, comment.char = "") > df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 27 88 3 Ming 84 29# 45 4 Bai 100 93 75

原因2:有的内容含有"




输入含有"

  read.table()函数会默认把双引号引起来的内容识别为一部分,使用quote = ""禁用该功能

df <- read.table(file = "grade.txt", sep = "\t", header = T, check.names = F, quote = "") > df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 27 88 3 Ming "84 "29 "45 4 Bai 100 93 75

5.缺失值

情况1:有些内容在记录时可能被空缺




内容空缺

> df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 88 3 Ming "84 "29 "45 4 Bai 100 93 75 > df[2,3] [1] ""

  空缺值在R中会被记录为空字符串,可能不方便后续分析处理

情况2:某内容空缺,并被记录为NA




空缺值被记录为NA

df <- read.table(file = "grade.txt", sep = "\t", header = T, check.names = F, quote = "", na.strings = "NA") > df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 <NA> 88 3 Ming "84 "29 "45 4 Bai 100 93 75

  默认情况下,read.table()函数会将记录为"NA"的内容转化为NA

缺失值被记录na

  可以使用na.strings参数设置识别缺失值的内容




空缺值被记录为na

df <- read.table(file = "grade.txt", sep = "\t", header = T, check.names = F, quote = "", na.strings = "na") > df name Chinese-1 Chinese:2 Chinese@3 1 zhang 98 78 56 2 Wang 78 NA <NA> 3 Ming "84 "29 "45 4 Bai 100 93 75 > df[2,3] [1] "NA" > df[2,4] [1] NA

  可以看到内容NA被正确读入,内容na被正确识别为NA。并且字符串NA和缺失值NA也可以被明显的区分出来。

上述关于read.table()函数的用法基本可以解决90%读入数据时遇到的问题,搞快用起来吧!

发布人:3f1f****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发