R语言中read.table函数不常见的用法-文本中有#注释符号

自从开始学习R语言,read.table是较早接触到的函数,因为要读取数据,也因为最开始学习数据分析是用“制表分隔符的txt”文件比较多,xlsm在linux系统中又不太合适,所以喜欢用txt文件,对csv格式的文件也无感。
通常我使用read.table都是直接输入以下代码,屡试不爽:

data_example <- read.table("example.txt", header=T, row.names=1, sep="\t")
#header表示列名,row.names表示行名,sep表示分割符号(\t就代表制表分隔符)

直到有一天我遇到了这种table:


image.png

按惯例读取数据后,发现根本不是我原来的数据


image.png

开始不明白怎么回事,只知道第一行不是列名,可能有问题,就删除了第一行,读取后发现结果没变。
在详细了解read.table的用法后,才知道是"#"出了问题,在R语言中"#"代表注释字符,识别到了该符号就跳过了,需要加入comment.char=""取消注释,以及使用skip=1跳过第一行(也可预先删除第一行)。重新输入代码:
data_example <- read.table("example.txt", header=T, row.names=1, sep="\t", comment.char="", skip=1)

得到了正确的结果:


image.png

主要问题是在使用该函数之前,并没有详细了解该函数的用法,只是满足了当时的要求,后面遇到别的类型的表格就麻爪了。
详细用法(参考文章:http://www.biye5u.com/article/R/2017/6348.html

read.table()函数的用法如下:

read.table(file, header = FALSE, sep = "", quote = "\"'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

各参数的说明如下:
(1)file
要读取的文件名称,矩形表格数据的每行是文件中的一行,与scan()函数相同,如果file参数中给定的文件名不是绝对路径,则文件名是相对于当前R的工作目录给出的。

(2)header
逻辑值。用于指出文件的第一行是否为数据变量的名字。缺省情况下,由文件的格式来确定此值。如果header设置为TRUE,则要求第一行要比数据列的数量少一列。

(3)sep
数据的分隔符。默认情况下,sep=""。此参数用于指定数据文件中每行中数据之间使用的分隔符。默认情况下,read.table()函数以空白作为数据的分隔符,即默认情况下,read.table()函数可以将1个或多个空格、tab制表符、换行符或回车符作为分隔符。

(4)quote
用于指定包围字符型数据的字符。如果不使用引用,则可以将该参数设置为quote=""
默认情况下,字符串可以被 " 或 ' 括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数 quote 控制。对于sep = "\n",默认值改为 quote = ""。
如果没有设定分隔字符,在被引号括起的字符串里面,引号需要用 C格式的转义字符进行转义,即在引号前面直接加反斜杠 \。
如果设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯,把引号重复两次以达到转义效果。例如:'One string isn''t two',"one more"
则可以使用下面的格式读取:read.table("testfile", sep = ",")
即在默认情况下,字符串中的双写单引号或双写双引号将被解释为一个并输出。

(5)dec
用于指明数据文件中小数的小数点。

(6)numerals
字符串类型。用于指定文件中的数字转换为双精度数据时丢失精度的情况下如何进行转换。这种情况发生于一个数字的位数超出double可以存储的位数时。有3种选择:
numerals = "allow.loss" :该值为默认值。允许丢失精度。
numerals = "warn.loss":给出一个丢失精度的警告消息,并与numerals="allow.loss"一样允许丢失精度。
numerals = "no.loss":当发生丢失精度时,将不会被转换为数字,根据as.is参数的设置,而转换为因子(factor)或则缺省情况下转换为字符串。

(7)row.names
保存行名的向量。可以使用此参数以向量的形式给出每行的实际行名。或者要读取的表中包含行名称的列序号或列名字符串。
在数据文件中有行头且首行的字段名比数据列少一个的情况下,数据文件中第1列将被视为行名称。除此情况外,在没有给定row.names参数时,读取的行名将会自动编号。
可以使用row.names = NULL强制行进行编号。

(8)col.names
指定列名的向量。缺省情况下是又"V"加上列序构成,即V1,V2,V3......

(9)as.is
该参数用于确定read.table()函数读取字符型数据时是否转换为因子型变量。当其取值为FALSE时,该函数将把字符型数据转换为因子型数据,取值为TRUE时,仍将其保留为字符型数据。其取值可以是逻辑值向量(必要时可以循环赋值),数值型向量或字符型向量,以控制哪些列不被转换为因子。
注意:可以通过设置参数 colClasses = "character"来阻止所有列转换为因子,包括数值型的列。

(10)na.strings
用于指定缺失数据的值,以转换为NA。在逻辑型,整型,数字型和复数型的字段中,空白域将被认为是缺失值。

(11)colClasses
用于指定列所属类的字符串向量。

(12)nrows
整型数。用于指定从文件中读取的最大行数。负数或其它无效值将会被忽略。

(13)skip
整型数。读取数据时忽略的行数。

(14)check.names
逻辑值。该参数值设置为TRUE时,数据框中的变量名将会被检查,以确保符在语法上是有效的变量名称。

(15)fill
逻辑值。在没有忽略空白行的情况下(即blank.lines.skip=FLASE),且fill设置为TRUE时,如果数据文件中某行的数据少于其他行,则自动添加空白域。

(16)strip.white
逻辑值,默认为FALSE。此参数只在指定了sep参数时有效。当此参数设置为TRUE时,数据文件中没有包围的字符串域的前边和后边的空格将会被去掉。

(17)blank.lines.skip
逻辑值,此参数值设置为TRUE时,数据文件中的空白行将被忽略。默认值为TRUE。

(18)comment.char
字符型。包含单个字符或空字符的向量。代表注释字符的开始字符。可以使用""关闭注释。

(19)allowEscapes
逻辑值。类似“\n”这种C风格的转义符。如果这种转义符并不是包含在字符串中,该函数可能解释为字段分隔符。

(20)flush
逻辑值。默认值为FALSE。当该参数值设置为TRUE时,则该函数读取完指定列数后将转到下一行。这允许用户在最后一个字段后面添加注释。

(21)stringsAsFactors
逻辑值。控制是否将字符向量转换为因子。

(22)fileEncoding
字符串类型,指定文件的编码方式。如果指定了该参数,则文本数据按照指定的格式重新编码。

(23)encoding
假定输入字符串的编码方式。

(24)text
字符串类型。当未提供file参数时,则函数可以通过一个文本链接从text中读取数据。

(25)skipNul
逻辑值。是否忽略空值。默认为FALSE。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 前言:微博参与话题 #给你四年时间你也学不会生信# read.table()函数是R最基本函数之一,主要用来读取矩...
    谢俊飞阅读 115,328评论 2 50
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,311评论 0 9
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,378评论 0 4
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,744评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,381评论 0 5