read.table()函数是R最基本函数之一,主要用来读取矩形表格数据。
各参数的说明如下:
(1)file
file是一个带分隔符的ASCII文本文件。
(2)header
一个表示文件是否在第一行包含了变量的逻辑型变量。
如果header设置为TRUE,则要求第一行要比数据列的数量少一列。
(3)sep
分开数据的分隔符。默认sep=""。
read.table()函数可以将1个或多个空格、tab制表符、换行符或回车符作为分隔符。
(4)quote
用于对有特殊字符的字符串划定接线的字符串,默认值是TRUE(")或单引号。(`)
(5)dec
decimal用于指明数据文件中小数的小数点。
(6)numerals
字符串类型。用于指定文件中的数字转换为双精度数据时丢失精度的情况下如何进行转换。
(7) row.names
保存行名的向量。可以使用此参数以 向量的形式 给出每行的实际行名。或者要读取的表中 包含行名称的列序号 或 列名字符串 。
在数据文件中有行头且首行的字段名比数据列少一个的情况下,数据文件中第1列将被视为行名称。除此情况外,在没有给定row.names参数时,读取的行名将会自动编号。
可以使用row.names = NULL强制行进行编号。
(8) col.names
指定列名的向量。缺省情况下是又"V"加上列序构成,即V1,V2,V3......
Tip:
rownames、colnames是base包中的行名、列名函数;
而row.names、col.names是read.table函数中的行名、参数
(9)as.is
该参数用于确定read.table()函数读取字符型数据时是否转换为因子型变量。当其取值为FALSE时,该函数将把字符型数据转换为因子型数据,取值为TRUE时,仍将其保留为字符型数据。其取值可以是逻辑值向量(必要时可以循环赋值),数值型向量或字符型向量,以控制哪些列不被转换为因子。
注意:可以通过设置参数 colClasses = "character"来阻止所有列转换为因子,包括数值型的列。
(10)na.strings
可选的用于表示缺失值的字符向量。
na.strings=c("-9","?")把-9和?值在读取数据时候转换成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
逻辑值,标记处字符向量是否需要转化为因子,默认是TRUE。
(22)fileEncoding
字符串类型,指定文件的编码方式。如果指定了该参数,则文本数据按照指定的格式重新编码。
(23)encoding
假定输入字符串的编码方式。
(24)text
字符串类型。当未提供file参数时,则函数可以通过一个文本链接从text中读取数据。
(25)skipNul
逻辑值。是否忽略空值。默认为FALSE。
参考资料1: R语言中read.table()函数用法详解 - 翔宇亭IT乐园
今天在写一个求众数的函数,思路很简单:统计unique数值,并计算其频数,取最大值就是,函数如下:
众数值没有问题,但是此处出现了因子水平levels,函数最后一步提取的应该是[1,1]位置的数值才对。怎么出现因子水平呢???
首先检验下众数
问题出现在table函数上,table函数作用就是统计一组向量中unique元素的数量,具体参数请参照R帮助文件。R中这样解释table函数 , “ table uses the cross-classifying factors to build a contingency table of the counts at each combination of factor levels ”。 因此,table()返回的结果是带有因子水平的。
这时候,当然想把因子变量转换成数值变量, as.numeric() , 这时候神奇的事情发生了:
此处呼叫万能的网友,知乎博主[醉一心],CSDN博主[YaoRaoLov]给出了答案。参照以下博文:
https://zhuanlan.zhihu.com/p/147799787
https://ask.csdn.net/questions/707550?sort=comments_count
再来看下table()返回的数据框e
因子型变量在unclass()函数的作用下,显示出真面目:原来就是 一个个数值型变量 。
这也就是为什么对其进行数值型转化时会得到1,2,3,4等一系列数值的原因。
它的 真实值存储在Levels里面 。
上述众数函数修改为下
table()的输出可以看成是一个带名字的数字向量。可以用names()和as.numeric()分别得到名称和频数:>x <- sample(c("a", "b", "c"), 100, replace=TRUE)
>names(table(x))
[1] "a" "b" "c"
>as.numeric(table(x))
[1] 42 25 33
或者,可以直接把输出结果转化为数据框,as.data.frame():
>as.data.frame(table(x))
x Freq
1 a 42
2 b 25
3 c 33
作者:王冠嵩
链接:http://www.zhihu.com/question/46661384/answer/103506127
来源:知乎
著作权归作者所有,转载请联系作者获得授权。