R语言入门:因子的使用

摘要:
在R语言中,有一种称为factor的特殊数据结构,与其他编程语言不同。该数据结构的主要目的是分类、计算频率和频率。在未来,R语言将在统计学中非常有用。I使用数据帧创建因子的第一种方法是使用间接方法创建因子数据集,因为如果数据帧中某列中的所有数据都是字符串,R语言将自动将该列中的数据默认为因子。

在R语言当中有因子这个特殊的数据结构,和别的编程语言不同,这个数据结构的主要目的是用来分类,计算频数和频率,在后期将R语言用于统计学当中将会十分受用。并且在绘图当中,我们使用同样的数据,将其转化为因子之后,在将这些数据放入绘制图像的函数当中,图像将会变得更加具有可读性。我们有两种方式来创建因子这个数据结构,第一种是在数据框当中自动创建,另一种方式是直接创建因子。

一.利用数据框创建因子

第一种方式是使用间接的方式来创建因子数据集,因为我们数据框当中如果某一列的数据全部都是字符串,那么R语言将会自动将这一列的数据默认为因子。我们来创建一个数据框看看:

> data<-data.frame(name=c("bob","mike","iris"),height=c(178,356,131),gender=c('f','m','f'))
> data
  name height gender
1  bob    178      f
2 mike    356      m
3 iris    131      f

很显然,我们所创建的数据框,除了height,其他两列的数据都是字符串,因此R语言会将gender和name默认是因子,我们可以尝试使用class来判断数据的类型:

> class(data$gender)
[1] "factor"
> class(data$name)
[1] "factor"
> class(data$height)
[1] "numeric"

我们打印一下hieght:

> data$height
[1] 178 356 131

R语言很显然给我们输出了height所对应数据的值,那么对于因子数据会不会也是这样呢?我们来看看打印出gender的值是怎样的:

> data$gender
[1] f m f
Levels: f m

可以从上面看到在打印gender的时候,R语言还显示出了level,这表示这个因子数据当中的数据有哪些类型,我们只有两种性别,因此只会输出 f 和 m 。

下面再来看看name的level如何:

> data$name
[1] bob  mike iris
Levels: bob iris mike

这三个姓名是各不相同的,因此会打印出不同的三个姓名level。

当然我们也可以直接使用level函数来查看因子当中的level,不是因子数据则会输出null,如下所示:

> levels(data$height)
NULL
> levels(data$gender)
[1] "f" "m"
> levels(data$name)
[1] "bob"  "iris" "mike"

nlevel函数用来查看因子数据level的长度:

> nlevels(data$name)
[1] 3

二.利用factor函数直接创建因子

我们创建一个有关性别的因子:

> sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE)
> sex
[1] female male   female female male  
Levels: female < male

在上面的代码当中,向量c代表了因子当中的数据集,levels代表了我们人为设定的level,当然即使不写这个,factor函数也会自动帮我们进行设定,但是这里为了和后面的labels相对应,因此必写。labels表示我们因子创建完毕后,每个因子重新命名后的名字,因为之前在创建因子的时候为了数据的简便性就没有将其英语单词写全,ordered表示因子的level按照顺序排列,一般在R语言当中,首先在level当中出现的因子向量,这里是“f”,其顺序会优先于“m”。下面是不设定顺序因子的情况:

> sex<-factor(c('f','f','m','m'),labels=c("female","male"))
> sex
[1] female female male   male  
Levels: female male

我们利用is.ordered函数来查看因子是否具有顺序:

> is.ordered(sex)
[1] FALSE

很显然这是没有顺序的,因此我们可以用ordered函数令他具有顺序,如果使用了这个函数,那么因子当中首先出现的level将小于后出现的level:

> ordered(sex)
[1] female female male   male  
Levels: female < male

这就是今天介绍的有关因子的全部知识了!希望你都能够掌握,并慢慢熟练起来!

免责声明:文章转载自《R语言入门:因子的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用hosts.allow和hosts.deny实现简单的防火墙Linux教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android多开/分身检测

原文:https://blog.darkness463.top/2018/05/04/Android-Virtual-Check/ 多开/分身原本用于方便有多个微信/QQ解决同时登录的问题,但近来年被各种黑产所利用,多见于薅羊毛,部分多开App甚至提供了篡改功能。对于普通用户根本不会有多开的需求的App,一旦检测到当前运行在多开环境下,有理由限制该用户的后...

Node 之http模块

   在Node.js的核心模块中主要有http、fs、url、querystring模块,在前面的博文中有一篇已经介绍了url模块,在上一篇博文中http模块使用到过,在这篇博文中我将详细分析其方法和原理。   1、http模块-----创建HTTP服务器、客户端          使用http模块只需要在文件中通过require(‘http’)引入即可...

数据挖掘:理论与算法(导论)

清华大学研究生公开课 数据挖掘是数据科学,是多领域交叉学科:数据挖掘 = 机器学习 + 人工智能 + 模式识别 + 统计学 数据挖掘的广泛应用: Business Intelligence Data Analytics Big Data Decision Support Customer Relationship Management "Educatio...

时序分析之Arrival Time

首先要理解两个概念:launch edge 和latch edge launch edge 是源寄存器发送数据的时钟沿,是时序分析的起点。 latch edge是目的寄存器捕获数据的时钟沿,是时序分析的终点。 如图示,源寄存器在0ns时发送数据,目的寄存器在5ns时采样数据,两者刚好相差一个时钟周期。 Data Arrival Time :从launch...

CentOS7安装zabbix

二进制包安装    centos 7 添加阿里云镜像 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum install epel-release 安装常用的开发组件 yum groups install "Develo...

AJAX全套

概述  对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。 AJAX类似于偷偷像后台发送数据。 1、传统的Web应用 一个简单操作需要重新加载全局数据 2、AJAX AJAX,Asynchronous JavaScript and XML (异步的Ja...