R学习 4

4 排序和非排序因素

因素(Factor)用于表示一个具有相同长度的离散组组的向量的一个向量对象。R提供了排序和非排序的因素。

4.1 一个具体例子

举个例子,我们有一个30个州的的士帐号样本,帐号所属的州由字符串向量state保存:

 > state <- c("tas", "sa",  "qld", "nsw", "nsw", "nt",  "wa",  "wa",
                  "qld", "vic", "nsw", "vic", "qld", "qld", "sa",  "tas",
                  "sa",  "nt",  "wa",  "vic", "qld", "nsw", "nsw", "wa",
                  "sa",  "act", "nsw", "vic", "vic", "act")

简单地通过factor()函数来创建因素:

> statef <- factor(state)

print()函数打印因素的方式与其它对象略有不同,会在最后一行打印出Levels信息。

> statef
      [1] tas sa  qld nsw nsw nt  wa  wa  qld vic nsw vic qld qld sa
     [16] tas sa  nt  wa  vic qld nsw nsw wa  sa  act nsw vic vic act
     Levels:  act nsw nt qld sa tas vic wa

可以通过levels()函数来得到因素的级别

>levels(statef)

 [1] "act" "nsw" "nt"  "qld" "sa"  "tas" "vic" "wa"


4.2 tapply()函数和不规则数组

继续上面的例子,假设我们有的士帐号的收入信息,并储存在另一个向量当中

> incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
                    61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
                    59, 46, 58, 43)

为了计算每个州的平均收入,我们可以使用tapply()函数:

> incmeans <- tapply(incomes, statef, mean)

结果为以州级别为标签的平均收入的向量:

    act    nsw     nt    qld     sa    tas    vic     wa

    44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250

函数tapply()用于将一个函数(这里为mean())应用到第一个参数(这里为incomes)中的每一个元素上,并由第二个参数(这里为statef)的元素级别来定义,就像它们是独立的向量结构。结果是一个和因素级别长度相同的向量。

假设我们需要计算收入均值的标准差。为了达到这个目的,我们需要编写一个R函数来计算每个给定向量的标准差,由于我们有一个内置的函数var()来计算样本标准差,所以该函数将只是简单的一行,并进行赋值如下:

> stderr <- function(x) sqrt(var(x)/length(x))

然后,我们将使用如下命令来计算标准差。

>incster <- tapply(incomes, statef, stderr)

计算结果如下

>incster

     act    nsw  nt    qld     sa tas   vic     wa
     1.5 4.3102 4.5 4.1061 2.7386 0.5 5.244 2.6575

tapply()函数同样可以用于处理更复杂的由多个类别索引的向量。比如,我们可能希望通过州和性别来对的士帐号进行分割,TODO:待补全


4.3 排序因素

因素的级别(levels)默认按照字母顺序存储,也可以显示指定排列的顺序。有时我们想对级别重新排序以便在统计中能够上,而reorder()函数就是用来创建这种排序因素。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值