T R中的因子factor ,levels,reorder r语言 reorder

该博文已整理到新地址:

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

变量可归结为类别(名义型),有序型,连续型变量(区间变量)。类别变量和有序类别(有序型)变量在R中称为因子(factor)。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,可以用数值代表也可以是字符型值,其具体数值没有加减乘除的意义,不能用来计算而只能用来分类或者计数。名义变量比如性别、省份、职业,有序变量比如班级名次。函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1……k](其中k是名义型变量中唯一值的个数),同时一个字符串(原始值)组成的内内部向量将映射到这些整数上

>haha<-c("aa","ab","ac",'aa')

>haha

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

>ha<-factor(haha)

> ha

[1] aa ab acaa

Levels: aa abac

>h<-factor(haha,ordered=TRUE)

> h

[1] aa ab acaa

Levels: aa < ab< ac

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

status<-c("poor","improved","excellent","poor");

【T】R中的因子(factor),levels,reorder r语言 reorder

status<-factor(status,ordered=TRUE)#会将编码为(3,2,1,3),并在内部将这关联为1=excellent,2=improved,3=poor。

sattus<-factor(status,order=TRUE,levels=c("poor","improved","excellent"))#这样各水平的排序为1=poor,2=improved,3=excellent。

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

> factor(1:3)

[1] 1 23

Levels: 1 23

> factor(1:3, levels=1:5)

[1] 1 23

Levels: 1 2 3 45

> factor(1:3,labels=c("A", "B", "C"))

[1] A BC

Levels: A BC

> factor(1:5,exclude=4)

[1] 1 2 3 NA5

Levels: 1 2 35

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

> ff <-factor(c(2, 4), levels=2:5)

>ff

[1] 24

Levels: 2 3 45

>levels(ff)

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

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

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

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

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

标签向量。

1、创建一个因子。

> colour<- c('G', 'G', 'R', 'Y', 'G', 'Y', 'Y', 'R', 'Y')

>colour

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

> col <-factor(colour)

>col

[1] G G R Y G YY R Y

Levels: G RY

> col1 <-factor(colour, levels = c('G', 'R', 'Y'), labels = c('Green','Red', 'Yellow'))

>col1

[1]Green GreenRed YellowGreen Yellow

[7] YellowRedYellow

Levels: GreenRed Yellow

> col2 <-factor(colour, levels = c('G', 'R', 'Y'), labels = c('1', '2','3'))

>col2

[1] 1 1 2 3 1 33 2 3

Levels: 1 23

> 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 33 2 3

> col3 <-factor(colour, levels = c('G', 'R'))

>col3

[1]GGRGR

[9]

Levels: GR

2、创建一个有序因子。

score <-c('A', 'B', 'A', 'C', 'B')

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

>score1

[1] A B A CB

Levels: C <B < A

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

exam <- c(98,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

> ff <- factor(1:100)

> ff

[1]123456789 1011 12 1314 15 1617 18 1920 21 2223 24 25

[26]26 27 2829 30 3132 33 3435 36 3738 39 4041 42 4344 45 4647 48 4950

[51]51 52 5354 55 5657 58 5960 61 6263 64 6566 67 6869 70 7172 73 7475

[76]76 77 7879 80 8182 83 8485 86 8788 89 9091 92 9394 95 9697 98 99100

100 Levels: 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 31 32 33 ... 100

> ff2 <- ff[1]

> ff2

[1] 1

100 Levels: 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 31 32 33 ... 100

解决办法:factor(ff2)

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

reorder

reorder.default{stats} R Documentation

Reorder Levels of aFactor

reorder is ageneric function. The "default" method treats its first argument asa categorical variable, and reorders its levels based on the valuesof a second variable, usually numeric.

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

Usage

reorder(x,...)

## Default S3method:

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://cos.name/cn/topic/107849

http://blog.sina.com.cn/s/blog_59f8748e01011in6.html

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

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

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/239661.html

更多阅读

浅析台湾乡愁诗中的家国意识 台湾人讲乡愁往事

游子的呻吟——浅析台湾乡愁诗中的家国意识内容摘要:台湾作为中华人民共和国不可分割的一部分,因其独特的地理位置和历史原因,与母体大陆的长期分离,使台湾乡愁诗人强烈地感受到离愁别绪、愁肠百结的心灵伤痛,因此而创作的大量乡愁诗根

fft谱分析中的栅栏效应和频谱泄露 fft频谱分析

http://blog.csdn.net/sunfoot001/archive/2010/09/22/5900917.aspxfft谱分析中的栅栏效应和频谱泄露栅栏效应:对采样信号的频谱,为提高计算效率,通常采用FFT算法进行计算,设数据点数为:  N = T/dt = T.fs  则计算得到的离散

声明:《T R中的因子factor ,levels,reorder r语言 reorder》为网友穿著校服拽天下分享!如侵犯到您的合法权益请联系我们删除