R 学习笔记(5) -- 因子和表

作者: wangpeng905 | 来源:发表于2017-04-06 14:26 被阅读55次

因子

因子 (factor) 是 R 语言中许多强大运算的基础,包括许多针对表格数据的运算。因子的设计思想来源于统计学中的名义变量,或称之为分类变量,这种变量本质上不是数字,而是对应为分类。

因子可以看成是包含了额外信息的向量,这额外的信息就是不同的类别,称之为水平 (level)。

> x <- c(5,12,13,12)
> xf <- factor(x)
> xf
[1] 5  12 13 12
Levels: 5 12 13
> # 因子的长度是其中元素数量,而不是水平数量
> length(xf)
[1] 4

因子的常用函数

tapply() 函数典型用法:tapply(x,f,g) x 是向量,f 是因子或因子列表,g 是函数,将 x 向量按照 f 因子水平进行分组,然后对每组应用 g 函数。

> ages <- c(25,26,55,37,21,42)
> affils <- c("R","D","D","R","U","D")
> tapply(ages, affils, mean)
 D  R  U 
41 31 21

split() 函数,tapply() 函数是将向量按因子水平分组,然后对每个子向量应用函数,而 split() 函数只是分组,不过可以对向量分组,也可以对数据框分组。

> d
  gender age income over25
1      M  47  55000      1
2      M  59  88000      1
3      F  21  32450      0
4      M  32  76500      1
5      F  33 123000      1
6      F  24  45650      0
> split(d$income, list(d$gender,d$over25))
$F.0
[1] 32450 45650

$M.0
numeric(0)

$F.1
[1] 123000

$M.1
[1] 55000 88000 76500

by() 函数,使用方式与 tapply() 类似,但是 tapply() 只能用于向量,而 by() 可以用于向量和数据库,实际 by() 函数在内部调用了 tapply() 函数。by() 第一个参数指定数据(可以是向量或数据框),第二个参数为分组因子,第三个参数为函数。


R 中的表

R 中的表可以看做是一个因子列表的频数表,统计学中称为列联表,用函数 table() 来生成表:

> fl <- list(x=c(5,7,9,7,9,5,9),y=c("a","b","a","a","b","a","a"))
> fl
$x
[1] 5 7 9 7 9 5 9

$y
[1] "a" "b" "a" "a" "b" "a" "a"

> table(fl)
   y
x   a b
  5 2 0
  7 1 1
  9 2 1

这个例子中的因子列表只有两列,生成一个二维表,如果有三列因子,则生成一个三维表(联想三维数组)。

表中有关矩阵和类似数组的操作

多数矩阵和数组的运算可以用在数据框上,同时也适用于表,因为表对象中单元格频数部分就是数组。

> ct
  vote.for.X vote.for.X.last.time
1        Yes                  Yes
2        Yes                   No
3         No                   No
4    NotSure                  Yes
5         No                   No
> cttab <- table(ct)
> cttab
          vote.for.X.last.time
vote.for.X No Yes
   No       2   0
   NotSure  0   1
   Yes      1   1

> cttab[1,1]
[1] 2
> cttab[1,2]
[1] 0
> cttab[1,]
 No Yes 
  2   0 
> cttab[,1]
     No NotSure     Yes 
      2       0       1
> addmargins(cttab)
          vote.for.X.last.time
vote.for.X No Yes Sum
   No       2   0   2
   NotSure  0   1   1
   Yes      1   1   2
   Sum      3   2   5
> dimnames(cttab)
$vote.for.X
[1] "No"      "NotSure" "Yes"    

$vote.for.X.last.time
[1] "No"  "Yes"


与因子和表有关的函数

aggregate() 函数对分组中的每一个变量调用 tapply() 函数。
cut() 函数是生成因子的一种常用方法,cut(x, b, labels=FALSE),x 是一个数据向量,向量 b 定义了一组区间,函数将确定 x 向量中每个元素落入 b 中的哪个区间。

> z
[1] 1.1 3.5 2.0 6.8 7.4 7.7 2.2
> b <- seq(1,10,0.5)
> b
 [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
[16]  8.5  9.0  9.5 10.0
> cut(z,b,labels=F)
[1]  1  5  2 12 13 14  3

b 向量确定的区间为半开半闭区间 (b[1],b[2]], (b[2],b[3]], ……
b[1] < 区间 <= b[2]


尊重人不应该胜于尊重真理。--柏拉图

相关文章

  • R 学习笔记(5) -- 因子和表

    因子 因子 (factor) 是 R 语言中许多强大运算的基础,包括许多针对表格数据的运算。因子的设计思想来源于统...

  • R语言主成分和因子分析篇

    转载自 R语言主成分和因子分析篇另可参考 R in action读书笔记(19)第十四章 主成分和因子分析 主成分...

  • R学习笔记2——因子

    因子——分类变量级别——类别label 标签 与 level 级别 创建因子 factor()把字符或者数字向量转...

  • R--因子与表

    因子 利用因子或者因子表,使用对应函数对数据框进行操作 因子表中因子需要与x有相同的长度 因子表的一部分是向量的话...

  • SQL notes

    目录 一,学习笔记 二,参考资料 持续跟新中 ...... 一,学习笔记 SQL 数据库,像极了Excel表。 R...

  • R语言学习笔记(7)-因子

    参考视频:https://www.bilibili.com/video/BV19x411X7C6?p=23[htt...

  • 2019-07-30[R语言编程艺术-3]

    chapter6 因子和表 因子 分类向量 因子不能添加非法水平(?) 因子常用函数 tapply(x,f,g),...

  • 第7章 基本统计分析

    《R语言实战》笔记系列 本章学习大纲 1.描述性统计分析 2.频数表和列联表 3.相关系数和协方差 4.t检验 5...

  • 理论:因子分析原理剖析

    因子分析概述: 因子分析分为Q型和R型,我们对R型进行如下研究: 一.因子分析步骤: 1.确认是是否适合做因子分析...

  • 处理因子的一些函数

    笔记说明 在R中,分类变量一般以因子(factor)的形式存在。forcats包是一个专门用于处理因子(facto...

网友评论

    本文标题:R 学习笔记(5) -- 因子和表

    本文链接:https://www.haomeiwen.com/subject/kvcqattx.html