iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R语言-进行数据的重新编码(recode)操作
  • 237
分享到

R语言-进行数据的重新编码(recode)操作

2024-04-02 19:04:59 237人浏览 泡泡鱼
摘要

在分析数据时我们经常会遇到将变量值转换成其他的值的情况(如:将连续变量转成分类变量)这时就需要我们对原有数据进行重新编码。本文将介绍R软件中常用的三种重编吗方法: 1、使用逻辑判断式

在分析数据时我们经常会遇到将变量值转换成其他的值的情况(如:将连续变量转成分类变量)这时就需要我们对原有数据进行重新编码。本文将介绍R软件中常用的三种重编吗方法:

1、使用逻辑判断式编码。

2、使用cut函数编码。

3、使用car程序包的recode函数。

(一)使用逻辑判断式

(1)现假设我们需要将下面的连续型变量x按照10与20分成三个组,新的分组名称为1、2、3:


> x2=1*(x<=10)+2*(x>10&x<=20)+3*(x>20)
> x2
 [1] 1 2 3 2 3 3 3 3 1 3 3 2 1 2 3 3 3 2 3 3

将上述变量的数字编码改为字符编码


> labels=c("A","B","C")
> x3=labels[x2]
> x3
 [1] "A" "B" "C" "B" "C" "C" "C" "C" "A" "C" "C" "B" "A" "B" "C" "C" "C" "B" "C" "C"

假设如下将以下范例月收入数据分成“低收入”,“中等收入”,“高收入”三个组:


> income<-c(130065,82961,133076,123028,108945,173466,17477)
> income
[1] 130065  82961 133076 123028 108945 173466  17477
> newcodes=c("低收入","中等收入","高收入")
Error: unexpected input in "newcodes=c("低收入"?
> newcodes=c("低收入","中等收入","高收入")
> index=1*(income<20000)+2*(income>=20000&income<=60000)+3*(income>60000)
> income=newcodes[index]
> income
[1] "高收入" "高收入" "高收入" "高收入" "高收入" "高收入" "低收入"

(2)使用ifelse函数

基本语法:ifelse(逻辑判断式,TRUE-表达式,FALSE-表达式)

编码成两个分组:


> x
 [1]  4 12 50 18 50 22 23 46  8 46 36 18 10 14 35 48 23 17 29 30
> (x2=ifelse(x<=30,1,2))
 [1] 1 1 2 1 2 1 1 2 1 2 2 1 1 1 2 2 1 1 1 1
> (x3=ifelse(x<=30,"A","B"))
 [1] "A" "A" "B" "A" "B" "A" "A" "B" "A" "B" "B" "A" "A" "A" "B" "B" "A" "A" "A" "A"

搭配%int%运算符,将"A",“C"重编码为"Group1”,“B”,“D"重编码为"Group2”:


> y
 [1] "B" "A" "C" "C" "B" "A" "D" "B" "C" "D"
 > (y2=ifelse(y %in% c("A","C"),"Group1","Group2"))
 [1] "Group2" "Group1" "Group1" "Group1" "Group2" "Group1" "Group2" "Group2" "Group1" "Group2"

当编码成三个或者三个以上的组时需要多次使用ifelse 函数:

将x按照10与20两个分割点分成1、2、3三组:


> x
 [1]  4 12 50 18 50 22 23 46  8 46 36 18 10 14 35 48 23 17 29 30
> (x2=ifelse(x<=10,1,ifelse(x<20,2,3)))
 [1] 1 2 3 2 3 3 3 3 1 3 3 2 1 2 3 3 3 2 3 3

将“A”“E”编码为1,"C"编码为2,“B”“D”编码为3:


> y
 [1] "B" "A" "C" "C" "B" "A" "D" "B" "C" "D"
> y2=ifelse(y%in%c("A","E"),1,ifelse(y=="C",2,3))
> y2
 [1] 3 1 2 2 3 1 3 3 2 3

(二)使用cut 函数

cut函数可以根据我们设置的分割点(breaks)将数据重编码,将一个数值向量变量转换为分组形态的factors变量。

基本语法:


cut(x,breaks,labels,include.lowest=F,right=T)

其中

x为数值向量

breaks为分割点信息。若breaks为向量,则根据向量中的数字进行分割。若breaks为大于1正整数k,则将

x分成均等的k组。

labels为分割后各组的名称,若为null,则输出数字向量,否则输出factor变量。

include.lowest=FALSE表示分割时不含各区间端点的最小值。

right=T表示各区间为左端open,右端closed的区间

使用cut函数将x向量依照0、10、20,max(x)分成3组


> x
 [1]  4 12 50 18 50 22 23 46  8 46 36 18 10 14 35 48 23 17 29 30
> x2=cut(x,breaks = c(0,10,20,max(x)),labels = c(1,2,3))
> x2
 [1] 1 2 3 2 3 3 3 3 1 3 3 2 1 2 3 3 3 2 3 3
Levels: 1 2 3
> as.vector(x2)
 [1] "1" "2" "3" "2" "3" "3" "3" "3" "1" "3" "3" "2" "1" "2" "3" "3" "3" "2" "3" "3"

若没有给定labels参数,cut函数自动按照分割点生成分组名称:


x3=cut(x,breaks = c(0,10,20,max(x)))
> x3
 [1] (0,10]  (10,20] (20,50] (10,20] (20,50] (20,50] (20,50] (20,50] (0,10]  (20,50] (20,50] (10,20] (0,10] 
[14] (10,20] (20,50] (20,50] (20,50] (10,20] (20,50] (20,50]
Levels: (0,10] (10,20] (20,50]

现在我们模拟产生10个N(60,10)的随机成绩,并且使用cut函数的breaks选项将其分成5个组:


> score=round(rnORM(10,60,10))
> score
 [1] 39 65 60 69 58 69 70 62 61 75
> score.cut=cut(score,breaks=5)
> score.cut
 [1] (39,46.2]   (60.6,67.8] (53.4,60.6] (67.8,75]   (53.4,60.6] (67.8,75]   (67.8,75]   (60.6,67.8]
 [9] (60.6,67.8] (67.8,75]  
Levels: (39,46.2] (46.2,53.4] (53.4,60.6] (60.6,67.8] (67.8,75]

由以上结果可知,cut()函数默认输出一个factor变量,并且自动将五个分组命名为“ (39,46.2]”…“ (67.8,75]”。如果cut()的选项labels=FALSE,则输出的结果是数字编码的一半向量变量:


> score.cut=cut(score,breaks=5,labels = F)
> score.cut
 [1] 1 4 3 5 3 5 5 4 4 5
> score.cut=as.factor(score.cut)
> score.cut
 [1] 1 4 3 5 3 5 5 4 4 5
Levels: 1 3 4 5

(三)使用car程序包中的recode函数

car程序包的recode函数可以将数值或者字符向量、factor变量重新编码。

基本语法:recode(x,recodes,as.factor.result,levels)

其中:

x为数值向量,字符向量或者factor 变量。

recode为设定重新编码规则的字符串

as.factor.result为是否输出factor变量。若是则为TRUE,不是为FALSE。

levels为排序向量。指定新的编码分组的顺序(默认是按照分组名称排序)。

recodes参数编码规则的写法

recodes参数的值是一个字符串,字符串里面是以分号分隔的编码规则:

recodes=“规则1;规则2…”

每一个编码规则的格式为旧码列表=新码,“旧码列表”部分可用lo代表旧码的最小值(low)、hi代表旧码的最大值(high)撰写规则如下:

(1)旧码=新码 旧码只有单一数值。例如:“0=NA”表示将0改为NA。

(2)旧码向量=新码 多个旧码改为一个新码。例如:“c(7,8,9)=‘high'”,将7,8,9改为high。

(3)start:end=新码 有序数字改码。例如:“lo:19=‘C'”。

(4)else=新码 所有其他情况。例如:“else=NA”。

程序范例:


> library(carData)
> library(car)
> x
[1] 1 2 3 1 2 3 1 2 3
> recode(x,"c(1,2)='A';else='B'")
[1] "A" "A" "B" "A" "A" "B" "A" "A" "B"

将成绩0~40分之间的分数编码为1,41-60分之间为2,61-80分为3,81以上为4,其他情况为NA


> score
 [1] 75 70 66 65 55 69 75 69 82 83
> recode(score,"lo:40=1;41:60=2;61:80=3;81:hi=4;else=NA")
 [1] 3 3 3 3 2 3 3 3 4 4

上例改用‘A'‘B'‘C''‘D'


> recode(score,"lo:40='A';41:60='B';61:80='C';81:hi='D';else=NA")
 [1] "C" "C" "C" "C" "B" "C" "C" "C" "D" "D"

补充:R语言字符串处理时的编码的一些问题问题(Windows环境)

R在windows中文系统时默认使用GB编码字符,而许多函数是只支持UTF-8的,例如

不作任何处理读入数据时,数据会以系统默认编码读入,tolower()函数工作失败

如果有干预的读入数据,即指定字符串的编码,则不会出错

数据库读写中文出现乱码的原理也是相似的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: R语言-进行数据的重新编码(recode)操作

本文链接: https://www.lsjlt.com/news/123848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言-进行数据的重新编码(recode)操作
    在分析数据时我们经常会遇到将变量值转换成其他的值的情况(如:将连续变量转成分类变量)这时就需要我们对原有数据进行重新编码。本文将介绍R软件中常用的三种重编吗方法: 1、使用逻辑判断式...
    99+
    2024-04-02
  • 怎么在R语言中对数据进行重新编码
    怎么在R语言中对数据进行重新编码?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(一)使用逻辑判断式(1)现假设我们需要将下面的连续型变量x按照10与20分成三个...
    99+
    2023-06-14
  • R语言变量重编码、重命名的操作
    1、变量重编码 重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程,如将符合某个条件的值重新赋值等,这里主要介绍两种常见的方法: #第一种方法 per <- da...
    99+
    2024-04-02
  • R语言对数据库进行操作的实例详解
    数据是关系数据库系统以规范化格式存储。 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询。 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器...
    99+
    2024-04-02
  • R语言怎么对数组进行转置操作
    在R语言中,可以使用transpose()函数对数组进行转置操作。下面是一个简单的示例: # 创建一个矩阵 mat <- ma...
    99+
    2024-03-06
    R语言
  • r语言中怎么进行数据采样和抽样操作
    在R语言中,可以使用以下函数来进行数据采样和抽样操作: 从数据集中随机抽取样本: sample(data, size, repl...
    99+
    2024-03-06
    r语言
  • R语言怎么对数组进行切片操作
    在R语言中,可以使用方括号[]来对数组进行切片操作。以下是一些示例: 对向量进行切片操作: # 创建一个向量 vec <-...
    99+
    2024-03-06
    R语言
  • 怎么在R语言中对变量进行重编码和重命名
    这篇文章给大家介绍怎么在R语言中对变量进行重编码和重命名,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、变量重编码重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程,如将符合某个条件的值重新赋值等,这里主要...
    99+
    2023-06-14
  • R语言求一行(列表、list)数据的平均数操作
    R语言求一个列表的平均数可以使用mean() : mean英文意思有平均数的含义 x=c(1,3,5,7,9) max(x) #这样即可求得平均数为 : 5 假如读取过一个cs...
    99+
    2024-04-02
  • R语言对Web数据操作实例
    许多网站提供数据供其用户使用。 例如,世界卫生组织(WHO)以CSV,txt和XML文件的形式提供健康和医疗信息的报告。 使用R语言程序,我们可以从这些网站以编程方式提取特定数据。 ...
    99+
    2024-04-02
  • R语言实现操作MySQL数据库
    用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源。用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据...
    99+
    2024-04-02
  • R语言数据的输入和输出操作
    数据的载入 R本身已经提供了超过50个数据集,而在众多功能包中,默认的数据集被存放在datasets程序包中,通过函数data()k可以查看系统提供所有的数据包,同时可以通过函数li...
    99+
    2024-04-02
  • r语言中怎么进行数据清洗
    在R语言中进行数据清洗,可以按照以下步骤进行: 缺失值处理:使用函数is.na()判断缺失值,使用函数na.omit()删除包含...
    99+
    2024-03-06
    r语言
  • r语言中怎么进行数据处理
    在R语言中进行数据处理时,常见的操作包括数据清洗、数据转换、数据筛选、数据聚合、数据可视化等。以下是一些常用的数据处理操作: 数据...
    99+
    2024-03-02
    r语言
  • R语言-使用ifelse进行数据分组
    数据分组,根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来研究,以揭示内在的联系和规律性; 在R中,我们常用ifelse函数来进行数据的分组,跟exc...
    99+
    2024-04-02
  • R语言中怎么进行数据筛选
    在R语言中,可以使用subset()函数来进行数据筛选。subset()函数的参数包括数据框(data frame)对象和逻辑条件,...
    99+
    2024-03-02
    R语言
  • R语言之xlsx包读写Excel数据的操作
    感谢Adrian A. Drǎgulescu发布的xlsx包 xlsx包提供了必要的工具来与Excel 2007进行交互。用户可以阅读和编写xlsx,并可以通过设置数据格式、字体、颜...
    99+
    2024-04-02
  • R语言变量级别的数据处理操作
    变量级别的数据处理无非是对变量的增删改查。 增 即增加新的变量 R语言中,增加一个新变量形式语句如下: 变量名 <- 表达式 表达式可以包含多种运算符和函数。常见运算符包括: ...
    99+
    2024-04-02
  • R语言 检验多重共线性的操作
    函数kappa() df<-data.frame() df_cor=cor(df) kappa(df_cor, exact=T) 当 κ<100κ<100 ...
    99+
    2024-04-02
  • R语言中怎么使用magrittr包进行管道操作
    在R语言中,可以使用magrittr包中的管道操作符%>%来简化数据处理流程。以下是使用magrittr包进行管道操作的示例:...
    99+
    2024-03-07
    R语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作