转:

接下来继续看我们的read.table函数。

首先介绍一个非常有用的函数na.strings。na.strings在read.table中默认na.strings=“NA”。

“na”的意思是“not

available”,即“不可用”,在数据分析中我们更愿意称呼它“missing

values”------缺失值。这么一说大家就明白了,它是处理缺失值的。我们在整理录入数据的时候,有一些数据因为各种原因无法调查,称为缺失值。缺失值有时候会用特别的数字表示而不一定空着不填。如在统计某人群男子身高(cm)时,有的人没有记录上,那么可能缺失值会用“999”表示,因为人们是不会长到999cm的。我们录入数据时,这样的数据用999表示,但是并不希望它被计算。此时就可以用na.strings定义它。

我举一个例子:

先读取文件wq,看看是什么样子:

> setwd("E:/Rstore/")

> WQ=read.table("wq.txt",header=T)

> WQ

A B C D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

这个是原表。假设我们现在认为数字98是缺失值,那么我们就这么录入:

WQ1=read.table("wq.txt",header=T,na.strings=98)

> WQ1

A B C D

1 12 65 78 NA

2 56 89 87 78

3 78 87 56 NA

4 NA 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 NA 82 86

9 65 87 12 45

显然,在R中,定义以后的缺失值在读出时用NA表示。如果你想定义多个缺失值,如在这张表中定义98和78都是缺失值,只需用c()函数将它们结合即可:

WQ2=read.table("wq.txt",header=T,na.strings=c(98,78))

> WQ2

A B C D

1 12 65 NA NA

2 56 89 87 NA

3 NA 87 56 NA

4 NA 89 24 56

5 NA 87 87 12

6 96 89 33 45

7 23 NA 69 65

8 23 NA 82 86

9 65 87 12 45

如果你只想读取数据的前6行,那么就需要另外一个函数nrows,它表示你要读取数据的前n行:

> WQ3=read.table("wq.txt",header=T,nrows=6)

> WQ3

A B C D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

这里需要说明的是,变量名不算在所选取范围内。这样是很方便的。它的默认值是nrows=-1,当然,只要你让nrows为负数,它和取默认值是一样的。

相比而言,另一个函数skip函数就不是那么方便了。skip,“跳读”,你可以理解它为“忽略”,默认值是0。

比如从第三行开始读取wq数据,那么需要让skip=2,即跳过(忽略)前两行开始读取数据:

> WQ4=read.table("wq.txt",header=T,skip=2)

> WQ4

X56 X89 X87

X78

1 78 87 56 98

2 98 89 24 56

3 78 87 87 12

4 96 89 33 45

5 23 78 69 65

6 23 98 82 86

7 65 87 12 45

注意,不同于nrows,变量名也被“跳”过去了。因此实际应用时可能需要和col.names合用,代码如下:

>

WQ4=read.table("wq.txt",header=T,skip=2,col.names=c("A","B","C","D"))

> WQ4

A

B C D

1 78 87 56 98

2 98 89 24 56

3 78 87 87 12

4 96 89 33 45

5 23 78 69 65

6 23 98 82 86

7 65 87 12 45

这样,我们不仅得到了原表(WQ)中第3-9行的数据,而且也拥有了每一列的变量名。

check.names,检查变量名。它的默认值是TRUE,它是干什么的呢?即如果你的列变量名有重复,使用check.names=T(或者不写这一项),它会对重复的变量名重新编写变量名。为什么要检查变量名呢?因为通常情况下表中的每一列应该为一种变量,不太可能会有相同的变量名。用法实际上很简单,我们看看例子:

在这张名为wq的表中,第二列和第三列的变量名均为“B”,如果我们直接读取这张表,看看发生什么:

> WQ=read.table("wq.txt",header=T)

> WQ

A B B.1 D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

在默认状态或者是check.names=T的情况下,R自动将第二个变量名“B”改成了“B.1”。如果我们使用check.names=F,那么这张表的变量名会原封不动的读出来:

> WQ=read.table("wq.txt",header=T,check.names=F)

> WQ

A B B D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

最后再介绍两个函数:fill和blank.lines.skip。

请看这张表:

直接用read.table读这样的表,是出不出来的:

> WQ=read.table("wq.txt",header=T)

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines,

na.strings, :

line 1 did not have 4 elements

R给出的错误提示是第一行没有4个元素。但是有的研究设计(如平衡不完全区组设计)可能会列出这样有空值类型的表格,或者说你的缺失值可能没有用其他数字或方法定义,就是没有填任何标记,那么就可以使用fill函数:

> WQ=read.table("wq.txt",header=T,fill=T)

> WQ

A B C D

1 12 65 78 NA

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

这样,表被读了出来,并且在缺失的地方自动补充了“NA”。

fill的默认值并不是FALSE,而是“fill=!blank.lines.skip”。

“!”是逻辑值“非”。“fill”顾名思义,你可以理解为“填满”,”blank lines

skip”则是跳过空白行。那么这个代码的意思就是fill默认不跳过空白行。所以当表中有空白存在,又没有定义fill=T,就不会被读出来。

如果你的数据是这样的:

当你把它读取的时候,原表空白行并不会被读出来:

> WQ=read.table("wq.txt",header=T)

> WQ

A B C D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

原表的空白行没有任何一个元素,所以并没有被读出来,因为默认值blank.lines.skip=T,即跳过空白行。此时就要用blank.lines.skip=F,即不跳过空白行:

> WQ=read.table("wq.txt",header=T,blank.lines.skip=F)

> WQ

A B C D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 NA NA NA NA

8 23 78 69 65

9 23 98 82 86

这样,读出了空白行并且用“NA”填补。

r语言read_html函数,R语言之read.table函数(2)相关推荐

  1. R语言使用epiDisplay包的roc.from.table函数可视化临床诊断表格数据对应的ROC曲线并输出新的诊断表、设置cex参数指定AUC值及其文本标签字体的大小

    R语言使用epiDisplay包的roc.from.table函数可视化临床诊断表格数据对应的ROC曲线并输出新的诊断表(diagnostic table).输出灵敏度.1-特异度.AUC值等.设置c ...

  2. R语者小case之——巧用table函数做多变量分类统计

    表中记录了两家医院在多年间分娩的产妇使用某种药物的信息. 要求计算出使用药物的产妇的比例,绘制成如下的图. library("readxl") library("ggpl ...

  3. oracle table 函数使用

    PL/SQL表---table()函数用法 /* PL/SQL表---table()函数用法: 利用table()函数,我们可以将PL/SQL返回的结果集代替table. oracle内存表在查询和报 ...

  4. table()函数的使用,提高查询效率

    一.序言 前段时间一直在弄报表,快被这些报表整吐了,然后接触到了Oracle的table()函数.所以今天把table()函数的具体用法整理下,防止下次遇到忘记了.. 利用table()函数,可接收输 ...

  5. oracle table()函数用法

    PL/SQL表---table()函数用法 /* PL/SQL表---table()函数用法: 利用table()函数,我们可以将PL/SQL返回的结果集代替table. oracle内存表在查询和报 ...

  6. table()函数用法

    PL/SQL表---table()函数用法 /* PL/SQL表---table()函数用法: 利用table()函数,我们可以将PL/SQL返回的结果集代替table. oracle内存表在查询和报 ...

  7. r语言显示找不到read_html,R语言中read.table函数不常见的用法-文本中有#注释符号...

    自从开始学习R语言,read.table是较早接触到的函数,因为要读取数据,也因为最开始学习数据分析是用"制表分隔符的txt"文件比较多,xlsm在linux系统中又不太合适,所以 ...

  8. R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

    R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

  9. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB

    R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...

最新文章

  1. 分析MAC*.a库文件信息
  2. lombok @EqualsAndHashCode 注解的影响
  3. 醉聊产品:产品经理如何做好测试?
  4. Centos 7安装Postfix用于发送提醒邮件
  5. java的character用法_Java中Character类的使用方法
  6. 看了《隐秘的角落》才知道,掉头发有多可怕!10个掉头发最快的专业!快看看你中枪了没有!...
  7. 值得一谈的鸿蒙2.0,赶紧撸一下hello world
  8. LeetCode 560. 和为K的子数组(前缀和差分)
  9. 三年级开始学计算机,三年级学生初识计算机的教学心得
  10. 剑指Offer之第一个只出现一次的字符
  11. 通过脚本下派WsusAgent3.0.exe
  12. Action类一般情况为何要继承ActionSupport
  13. 接手线上Mysql服务器,我们需要做什么?
  14. 经典c语言基础代码大全,经典基础实例编程C语言代码.doc
  15. nodejs 延时函数
  16. 2010年郑州注册物业管理师培训
  17. C++primer plus第六版课后编程题答案14.3(仅供参考)
  18. ORACLE通过dblink同步SDO_ORDINATE_ARRAY_STR的数据
  19. 迅软信息签约安龙基因医药技术构建医药行业防护体
  20. Internet Explorer 编程简述(序)

热门文章

  1. CentOS 7服务器安装brook和bbr加速
  2. React中如何引入原生JS库
  3. mcs51C语言指令系统,MCS-51单片机指令系统和汇编语言程序实例
  4. 聊聊二十七八岁,聊二十一二岁
  5. IBM DS4300磁盘损坏事故的数据恢复解决思路
  6. java for 标签,标签用于实现循环功能,类似与Java语句中的for循环。( )
  7. 主动把自己碎掉的海尔,想借力区块链搭上智能时代列车
  8. 海航金鹏携手铛铛社交,航旅社群经济引领新航旅时代
  9. 多核心Linux内核路径优化的不二法门之——多核心平台TCP优化
  10. 数风流人物,俱在今朝!|2019年度CSDN博客之星TOP10榜单揭晓-智华非常荣幸入选中国博客之星TOP9,非常感谢大家的支持,愿和读者朋友们共同努力,坚持学习,让每个人都能实现自己的梦想!