python中factor函数_【T】R中的因子(factor),levels, reorder

该博文已整理到新地址:

http://qinqianshan.com/factor、levels、reorder/

变量可归结为类别(名义型),有序型,连续型变量(区间变量)。类别变量和有序类别(有序型)变量在R中称为因子(factor)。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,可以用数值代表也可以

是字符型值,其具体数值没有加减乘除的意义,不能用来计算而只能用来分类或者计数。名

义变量比如性别、省份、职业,有序变量比如班级名次。函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1……k](其中k是名义型变量中唯一值的个数),同时一个字符串(原始值)组成的内内部向量将映射到这些整数上

>

haha

>

haha

[1] "aa" "ab" "ac"

"aa"

>

ha

> ha

[1] aa ab ac

aa

Levels: aa ab

ac

>

h

> h

[1] aa ab ac

aa

Levels: aa < ab

< ac

对于字符型向量,因子的水平默认依字母顺序创建,而按默认字母顺序排序的因子很少能够让人满意,所以可以通过levels选项来覆盖默认排序。例如

status

status

sattus

#这样各水平的排序为1=poor,2=improved,3=excellent。

levels 用来指定因子可能的水平(缺省值是向量x中互异的值),表示这组离散值;labels用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑型选项用来指定因子的水平是否有次序。回想数值型或字符型的x。下面有一些例子:

[1] 1 2

3

Levels: 1 2

3

[1] 1 2

3

Levels: 1 2 3 4

5

> factor(1:3,

labels=c("A", "B", "C"))

[1] A B

C

Levels: A B

C

> factor(1:5,

exclude=4)

[1] 1 2 3 NA

5

Levels: 1 2 3

5

函数levels用来提取一个因子中可能的水平值:

> ff

factor(c(2, 4), levels=2:5)

>

ff

[1] 2

4

Levels: 2 3 4

5

>

levels(ff)

[1] "2" "3" "4"

"5"

因子用来存储类别变量(categorical

variables)和有序变量,这类变量不能用来计算而只能用来分类或者计数。因子表示分类变量,有序因子表示有序变量。一个因子不仅包括分类变量本身还包括变量不同的可能水平(即使它们在数据中不出现)。因子函数factor用下面的选项创建一个因子:

factor(x,

levels = sort(unique(x), na.last = TRUE),

labels = levels,

exclude = NA, ordered = is.ordered(x))

其中x是数据,levels是因子水平向量,labels是因子的

标签向量。

1、

创建一个因子。

> colour

>

colour

[1] "G" "G" "R"

"Y" "G" "Y" "Y" "R" "Y"

> col

factor(colour)

>

col

[1] G G R Y G Y

Y R Y

Levels: G R

Y

> col1

factor(colour, levels = c('G', 'R', 'Y'), labels = c('Green',

'Red', 'Yellow'))

>

col1

[1]

Green Green Red Yellow

Green Yellow

[7] Yellow

Red Yellow

Levels: Green

Red Yellow

> col2

factor(colour, levels = c('G', 'R', 'Y'), labels = c('1', '2',

'3'))

>

col2

[1] 1 1 2 3 1 3

3 2 3

Levels: 1 2

3

> col_vec

as.vector(col2) #转换成字符向量

>

col_vec

[1] "1" "1" "2"

"3" "1" "3" "3" "2" "3"

> col_num

as.numeric(col2) #转换成数字向量

>

col_num

[1] 1 1 2 3 1 3

3 2 3

> col3

factor(colour, levels = c('G', 'R'))

>

col3

[1]

G G R G R

[9]

Levels: G

R

2、创建一个有序因子。

score

c('A', 'B', 'A', 'C', 'B')

score1

ordered(score, levels = c('C', 'B', 'A'));

>

score1

[1] A B A C

B

Levels: C <

B < A

3、用cut()函数将一般的数据转换成因子或有序因子。

exam

97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98,

65, 79, 74,

58, 59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)

exam1

cut(exam, breaks = 3) #切分成3组

exam2

cut(exam, breaks = c(0, 59, 69, 79, 89, 100)) #切分成自己设置的组

attr(exam1,

'levels'); attr(exam2, 'levels'); attr(exam2, 'class')

ordered(exam2,

labels = c('bad', 'ok', 'average', 'good', 'excellent'))

#一个有序因子

4.table计算每个因子出现的次数

>

table(score1)

score1

C B A

1 2 2

如何去除factor中冗余的level

[1]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

[26]

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

[51]

51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

[76]

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

100 Levels: 1 2

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

28 29 30 31 32 33 ... 100

[1] 1

100 Levels: 1 2

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

28 29 30 31 32 33 ... 100

解决办法:factor(ff2)

其实啊,这个levels就是表示所有可能的取值(也就是对因子向量进行分组,相同的归为一组,每组为一个Level,有点Unique的味道),并有一个顺序

reorder

reorder.default

{stats} R Documentation

Reorder Levels of a

Factor

reorder is a

generic function. The "default" method treats its first argument as

a categorical variable, and reorders its levels based on the values

of a second variable, usually numeric.

根据第二列的值,来重新拍一下第一列的Levels。

Usage

reorder(x,

...)

## Default S3

method:

reorder(x, X,

FUN = mean, ...,

order = is.ordered(x))

require(graphics)

bymedian

with(InsectSprays, reorder(spray, count, median))

boxplot(count ~

bymedian, data = InsectSprays,

xlab = "Type of spray", ylab = "Insect count",

main = "InsectSprays data", varwidth = TRUE,

col = "lightgray")

ps:

这里面的FUN还不是太理解,反正可以应用到ggplot中bar_geom中了,见http://blog.sina.com.cn/s/blog_670445240102v1xw.html

参考资料:

http://f.dataguru.cn/thread-50070-1-1.html

http://www.stathome.cn/manual/s/04.html

https://stat.ethz.ch/R-manual/R-devel/library/stats/html/reorder.factor.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值