R语言 Factor类型的变量使用说明

factor类型的创建

1. factor( )

> credit_rating <- c("BB", "AAA", "AA", "CCC", "AA", "AAA", "B", "BB") #生成名为credit_rating的字符向量
> credit_factor <- factor(credit_rating) # step 2.将credit_rating转化为因子
> credit_factor
[1] BB AAA AA CCC AA AAA B BB
Levels: AA AAA B BB CCC
> str(credit_rating) #调用str()函数,显示credit_rating结构
 chr [1:8] "BB" "AAA" "AA" "CCC" "AA" "AAA" "B" "BB"
> str(credit_factor) #调用str()函数,显示credit_factor结构
 Factor w/ 5 levels "AA","AAA","B",..: 4 2 1 5 1 2 3 4

2. levels( )

上述代码中第二个运行后得到了levals,用于显示不同的因子(不重复),上述代码运行一二行

>credit_rating <- c("BB", "AAA", "AA", "CCC", "AA", "AAA", "B", "BB")
> credit_factor <- factor(credit_rating) # step 2.将credit_rating转化为因子
> credit_factor
[1] BB AAA AA CCC AA AAA B BB
Levels: AA AAA B BB CCC
> levels(credit_factor)
[1] "AA" "AAA" "B" "BB" "CCC"
>levels(credit_factor) <-c("2A","3A","1B","2B","3C")
> credit_factor
[1] 2B 3A 2A 3C 2A 3A 1B 2B
Levels: 2A 3A 1B 2B 3C

3. Factor 汇总:summary()函数

> summary(credit_rating)
 Length  Class  Mode
  8 character character
> summary(credit_factor)
 AA AAA B BB CCC
 2 2 1 2 1

4. factor 可视化:plot()

# 使用plot()将credit_factor可视化
plot(credit_factor)
#> summary(credit_factor)
# AA AAA B BB CCC
 # 2 2 1 2 1

1

5. cut( )函数 对数据进行分组

>AAA_rank <- sample(seq(1:100), 50, replace = T)
> AAA_rank
 [1] 90 28 63 57 96 41 93 70 76 36 26 1 86 43 47 15 23 70
[19] 63 1 79 100 20 59 17 23 84 96 21 33 32 19 52 58 81 37
[37] 22 58 42 75 41 64 15 58 63 2 1 65 54 35
> # step 1:使用cut()函数为AAA_rank创建4个组
> AAA_factor <- cut(x = AAA_rank , breaks =c(0,25,50,75,100) )
> > AAA_factor
 [1] (75,100] (25,50] (50,75] (50,75] (75,100] (25,50] (75,100] (50,75]
 [9] (75,100] (25,50] (25,50] (0,25] (75,100] (25,50] (25,50] (0,25]
[17] (0,25] (50,75] (50,75] (0,25] (75,100] (75,100] (0,25] (50,75]
[25] (0,25] (0,25] (75,100] (75,100] (0,25] (25,50] (25,50] (0,25]
[33] (50,75] (50,75] (75,100] (25,50] (0,25] (50,75] (25,50] (50,75]
[41] (25,50] (50,75] (0,25] (50,75] (50,75] (0,25] (0,25] (50,75]
[49] (50,75] (25,50]
Levels: (0,25] (25,50] (50,75] (75,100]
> # step 2:使用levels()按顺序将级别重命名
> levels(AAA_factor) <- c("low","medium","high","very_high")
>
> # step 3:输出AAA_factor
> AAA_factor
 [1] medium medium very_high high  very_high high  high
 [8] high  medium medium very_high high  medium very_high
[15] medium low  medium low  high  medium low
[22] medium high  very_high very_high very_high medium very_high
[29] low  low  low  medium very_high low  very_high
[36] low  very_high low  low  high  medium medium
[43] medium low  low  low  low  medium medium
[50] medium
Levels: low medium high very_high
>
> # step 4:绘制AAA_factor
> plot(AAA_factor)
>

2

6. 删除元素 :- 表示删除

(1)-1:删除第一位的元素,-3:删除第三位的元素

(2)

> credit_factor
[1] BB AAA AA CCC AA AAA B BB
Levels: AA AAA B BB CCC
> # 删除位于`credit_factor`第3和第7位的`A`级债券,不使用`drop=TRUE`
> keep_level <- credit_factor[c(-3,-7)]
>
> # 绘制keep_level
> plot(keep_level)
>
> # 使用相同的数据,删除位于`credit_factor`第3和第7位的`A`级债券,使用`drop=TRUE`
> drop_level <-credit_factor[c(-3,-7),drop=TRUE]
>
> # 绘制drop_level
> plot(drop_level)
>

7. 转换Factor为String类型

>cash=data.frame(company = c("A", "A", "B"), cash_flow = c(100, 200, 300), year = c(1, 3, 2)) #创建数据框
>str(cash)
'data.frame': 3 obs. of 3 variables:
 $ company : Factor w/ 2 levels "A","B": 1 1 2
 $ cash_flow: num 100 200 300
 $ year  : num 1 3 2

注意:创建数据框时,R的默认行为是将所有字符转换为因子

那么,如何在创建数据框时,不让r的默认行为执行呢?

采用 stringsAsFactors = FALSE

> cash=data.frame(company = c("A", "A", "B"), cash_flow = c(100, 200, 300), year = c(1, 3, 2),stringsAsFactors=FALSE) #创建数据框
> str(cash)
'data.frame': 3 obs. of 3 variables:
 $ company : chr "A" "A" "B"
 $ cash_flow: num 100 200 300
 $ year  : num 1 3 2

8. 创建有序Factor类型:ordered=TRUE

# 有序Factor类型
credit_rating <- c("AAA", "AA", "A", "BBB", "AA", "BBB", "A")
credit_factor_ordered <- factor(credit_rating, ordered = TRUE, levels = c("AAA", "AA", "A", "BBB"))
>credit_rating <- c("BB", "AAA", "AA", "CCC", "AA", "AAA", "B", "BB")
> credit_factor <- factor(credit_rating) # step 2.将credit_rating转化为因子
> credit_factor #此时的credit_factor 无序
>ordered(credit_factor, levels = c("AAA", "AA", "A", "BBB"))

9. 删除因子级别时,采用drop=TRUE

>credit_factor
[1] AAA AA A BBB AA BBB A
Levels: BBB < A < AA < AAA
>credit_factor[-1]
[1] AA A BBB AA BBB A
Levels: BBB < A < AA < AAA #可见,AAA还存在
>credit_factor[-1, drop = TRUE] #完全放弃AAA级别
[1] AA A BBB AA BBB A
Levels: BBB < A < AA

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

(0)

相关推荐

  • R语言基本语法深入讲解

    基本数据类型 数据类型 向量 vector 矩阵 matrix 数组 array 数据框 data frame 因子 factor 列表 list 向量 单个数值(标量)没有单独的数据类型,它只不过是向量的一种特例 向量的元素必须属于某种模式(mode),可以整型(integer).数值型(numeric).字符型(character).逻辑型(logical).复数型(complex) 循环补齐(recycle):在一定情况下自动延长向量 筛选:提取向量子集 向量化:对向量的每一个元素应用函数

  • R语言数据类型深入详解

    R语言用来存储数据的对象包括: 向量, 因子, 数组, 矩阵, 数据框, 时间序列(ts)以及列表 意义介绍 1. 向量(一维数据): 只能存放同一类型的数据 语法: c(data1, data2, ...),访问的时候下标从1开始(和Matlab相同);向量里面只能存放相同类型的数据. > x <- c(1,5,8,9,1,2,5) > x [1] 1 5 8 9 1 2 5 > y <- c(1,"zhao") # 这里面有integer和字符串, 整

  • R语言属性知识点总结及实例

    属性(attribute):R中对象具备的特性 特性描述了所代表的内容以及R解释该对象的方式 很多时候两个对象之间的唯一差别在于它们的属性不同 常见的属性 属性 描述 class 对象的类 comment 对象的注释,一般用于描述对象的含义 dim 对象的维度 dimnames 与对象的每个维度相关的名字 names 返回对象的名字属性.返回结果取决于对象的类型.对于数据框对象会返回数据框的列名;对于数组会返回数组中被命名元素的名字 row,names 对象的行名(dimnames相关) tsp

  • R语言 Factor类型的变量使用说明

    factor类型的创建 1. factor( ) > credit_rating <- c("BB", "AAA", "AA", "CCC", "AA", "AAA", "B", "BB") #生成名为credit_rating的字符向量 > credit_factor <- factor(credit_rating) #

  • R语言因子类型的实现

    目录 1.因子 2.table()函数 3.tapply()函数 4.forcats包的因子函数 1.因子 R 中用因子代表数据中分类变量 , 如性别.省份.职业.有序因子代表有序量度,如打分结果,疾病严重程度等. 用 factor() 函数把字符型向量转换成因子,如 x <- c(" 男", " 女", " 男", " 男", " 女") sex <- factor(x) sex 返回: at

  • R语言 如何删除指定变量或对象

    R语言中删除指定变量或对象,可以直接删除某名字的变量或对象,也可以删除以字符串形式表示的变量和对象. 例如: 1.直接删除 >a<-c(1,2,3) >rm(a) 2.以字符串形式的方式删除 >a<-c(1,2,3) >rm('a') 3.删除不再需要的对象 在使用R语言的过程中,除了要保留特定的对象外,其他的对象不再需要 >a<-ls() > rm(list=a[which(a!='c2' & a !='m2' & a !='cpu1

  • R语言绘图公式与变量对象混合拼接实现方法

    当我们在R中进行绘图时,如果涉及到数学或统计公式的展现,可以使用函数:expression(),并且与 paste() 结合可以非常轻松的展现出自己想要展示的公式.详细的相关内容可参考: R进行绘图时输出希腊字符.上标.下标及数学公式 但这样做会遇到一个问题,在我们想批量产生大量含有不同变量值的标题时,如果遇到变量与公式的混合输出,就没有办法将变量里面的值进行输出了(使用 do.call() 等函数均不行). 举个栗子,若 m <- 10000,n <- 2000,我们如何让这两个变量直接显示

  • R语言实现将分类变量转换为哑变量(dummy vairable)

    生成测试数据 a1 <- c("f","f","b","b","c,"c") 利用nnet包中的函数class.ind > class.ind(a1) b c f [1,] 0 0 1 [2,] 0 0 1 [3,] 1 0 0 [4,] 1 0 0 [5,] 0 1 0 [6,] 0 1 0 class.ind代码 class.ind <- function(cl) { n &

  • R语言-修改(替换)因子变量的元素操作

    因子变量的核心是水平,通过指定水平来修改. x<-c(1,1,1,1,2,2,2,3,3,3,3,4) xx<-factor(x);xx levels(xx) #得到水平为3的位置 level_3<-which(levels(xx)==3) #重新赋值 levels(xx)[level_3]<-03 xx #由于新值是03,0开头,所以把03当成3处理 levels(xx)[level_3]<-c("03") xx #字符串会自动转换成因子 levels(

  • R语言 data.frame()命令的使用说明

    同expand.grid() 一样,data.frame() 也是一个生产数据框的命令 不同的是,两者产生的结果,要求不一样 data.frame() 的命令,如 data.frame(x=c(1:4),m=c(10,20,30),n=c(5:16)) x m n 1 1 10 5 2 2 20 6 3 3 30 7 4 4 10 8 5 1 20 9 6 2 30 10 7 3 10 11 8 4 20 12 9 1 30 13 10 2 10 14 11 3 20 15 12 4 30 16

  • R语言glmnet包lasso回归中分类变量的处理图文详解

    我们在既往文章<手把手教你使用R语言做LASSO 回归>中介绍了glmnet包进行lasso回归,后台不少粉丝发信息向我问到分类变量处理的问题,我后面查了一下资料之前文章分类变量没有处理,非常抱歉.现在来重新聊一聊分类变量的处理. 我们导入glmnet包的时候可以看到,还需要导入一个Matrix包,说明这个矩阵包很重要 按照glmnet包的原文如下: 就是告诉我们,除了Cox Model外,其他的表达都支持矩阵形式,在Cox Model的介绍中,函数样式为 说明我们应该把其他变量变为矩阵的形式

  • R语言多线程运算操作(解决R循环慢的问题)

    已经大半年没有更新博客了..最近都跑去写分析报告半年没有R 这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed......昨天试了下,终于跑通了,而且过程还挺顺利 step1 先查下自己电脑几核的,n核貌似应该选跑n个线程,线程不是越多越好,线程个数和任务运行时间是条开口向下的抛物线,最高点预计在电脑的核数上. detectCores( )检查当前电脑可用核数 我的是4所以step2选的是4 library(parallel) cl.

  • R语言常见面试题整理

    尊敬的读者,这些R语言面试题是专门设计的,以便您应对在R语言相关面试中可能会被问到的问题. 根据我的经验,良好的面试官几乎不打算在你的面试中问任何特定的问题,通常都是以如下的问题为开端进一步展开后继的问题. 什么是R语言编程? R语言是一种用于统计分析和为此目的创建图形的编程语言.不是数据类型,它具有用于计算的数据对象.它用于数据挖掘,回归分析,概率估计等领域,使用其中可用的许多软件包. R语言中的不同数据对象是什么? 它们是R语言中的6个数据对象.它们是向量,列表,数组,矩阵,数据框和表. 什

随机推荐