R语言因子理解,转自知乎,mark一下

原文链接:如何理解R中因子(factor)的概念?
作者:Sanyo
链接:https://www.zhihu.com/question/48472404/answer/455193433
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、定义
标准定义: 因子用来存储类别变量和有序变量,这类变量不能用来计算而只能用来分类或者计数。举个例子来看。我们在取用数据的时候,肯定会有很多维度,比如我在整理某个事件的媒体传播情况,会有这些维度:标题、媒体、网址、阅读量等等。
在这里插入图片描述
这些维度里面,有文本格式的,也有数字格式的。这个时候因子的概念就引入了,我把这些不管是文本格式的数据列还是数字格式的数据列,都可以统一包装成因子数据格式,差不多就可以这么理解它。(后面讲为什么要这么做)

二:简要介绍一下因子
你可以这么创建一个因子:

factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)

因为我们只是为了理解这东西,所以先只看levels和labels这两个参数。
首先是因子水平levels,下面我创建一个新闻的来源维度,w代表微信,m代表网媒:

source<- factor(c('w','w','m','m','m'),levels=c('w','m'))

因子source的值是向量c(‘w’,‘w’,‘m’,‘m’,‘m’),因子水平是c(‘w’,‘m’),打印出来是这个样子:
在这里插入图片描述
这里的levels规定了因子的取值范围,如果我在创建值向量中多一个levels范围外的“y”,他就显示不出来了,显示为<NA>

在这里插入图片描述
然后是因子水平的标签labels,使用factor函数创建因子,可以使用labels参数为每个因子水平添加标签,labels参数的字符顺序,要和levels参数的字符顺序保持一致,例如:

source<- factor(c('w','w','m','m','m'),levels=c('w','m'),labels=c('weixin','media'))

然后他会是这样的:
在这里插入图片描述
三、为什么要这么设定,因子有什么用?
因子其实是把序列中的数据看成是一个类别、等级,或者说就是一个点,比如媒体,可以有网媒、微信,阅读量,本身是个连续的数据,这里每一个阅读量,都被看成一个类别(虽然这类数值不适合作为类别,更适合作为连续数值处理)

类别数据,可以帮你查看有哪些类别:
在这里插入图片描述
查看有多少类别:
在这里插入图片描述
具体应用中还有很多用,本文只为了了解,所以不继续展开。

四、实际操作中遇到过的坑:
在创建具有文本数据列的任何数据框时,R语言将文本列视为分类数据并在其上创建因子。这就是为什么,我们读取CSV或者EXCEL时,经常莫名其妙读进来的是因子,完全不知道怎么处理。你可以用str()先查一下数据是什么格式的,比如我的source就是factor因子:
在这里插入图片描述
所以怎么办呢?第一个办法,比如读取CSV的时候,在后面加上stringsAsFactors = FALSE,读出来的数据就不会转换成因子格式了:

data2 <- read.csv("文件路径",sep=",",header = FALSE,stringsAsFactors = FALSE)

第二个方法,读进来之后内容也是可以转的,直接用as.character()就可以将数据转成文本:
在这里插入图片描述
介绍到这里,一般的使用应该是没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值