R语言-频数统计函数

R如何对数据进行分组

1. factor()函数

> mtcars$cyl <- factor(mtcars$cyl)
> mtcars$cyl
 [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
Levels: 4 6 8

2. cut()函数

> cut(mtcars$mpg,c(seq(10,50,10)))
 [1] (20,30] (20,30] (20,30] (20,30] (10,20] (10,20] (10,20] (20,30] (20,30] (10,20] (10,20]
[12] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20] (30,40] (30,40] (30,40] (20,30] (10,20]
[23] (10,20] (10,20] (10,20] (20,30] (20,30] (30,40] (10,20] (10,20] (10,20] (20,30]
Levels: (10,20] (20,30] (30,40] (40,50]

R进行频数统计

1. table()函数

#一维数据的频数
> table(mtcars$cyl)

 4  6  8 
11  7 14 
> table(cut(mtcars$mpg,c(seq(10,50,10))))

(10,20] (20,30] (30,40] (40,50] 
     18      10       4       0 

#二维数据的频数:一个空白对照,一个处理组
> table(mtcars$cyl,mtcars$gear)
   
     3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
  
#R语言中的with函数,把所有操作都限制在数据框上
> with(mtcars,table(cyl,gear))				#强调用mtcars数据集中的数据
   gear
cyl  3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
#三维列联表
> with(mtcars,table(cyl,gear,carb))
, , carb = 1

   gear
cyl 3 4 5
  4 1 4 0
  6 2 0 0
  8 0 0 0

, , carb = 2

   gear
cyl 3 4 5
  4 0 4 2
  6 0 0 0
  8 4 0 0

, , carb = 3

   gear
cyl 3 4 5
  4 0 0 0
  6 0 0 0
  8 3 0 0

, , carb = 4

   gear
cyl 3 4 5
  4 0 0 0
  6 0 4 0
  8 5 0 1

, , carb = 6

   gear
cyl 3 4 5
  4 0 0 0
  6 0 0 1
  8 0 0 0

, , carb = 8

   gear
cyl 3 4 5
  4 0 0 0
  6 0 0 0
  8 0 0 1

2. xtabs()函数

xtabs(formula = ~., data)
formula:公式
data:数据框

#一维数据频数
> xtabs(~cyl,mtcars)
cyl
 4  6  8 
11  7 14 

#二维数据频数
> xtabs(~cyl+gear,mtcars)
   gear
cyl  3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
#三维列联表
> xtabs(~cyl+gear+carb,mtcars)

#平铺式列联表
> y <- xtabs(~cyl+gear+carb,mtcars)
> ftable(y)
         carb 1 2 3 4 6 8
cyl gear                 
4   3         1 0 0 0 0 0
    4         4 4 0 0 0 0
    5         0 2 0 0 0 0
6   3         2 0 0 0 0 0
    4         0 0 0 4 0 0
    5         0 0 0 0 1 0
8   3         0 4 3 5 0 0
    4         0 0 0 0 0 0
    5         0 0 0 1 0 1

R进行频率统计

1. prop.table()函数

> prop.table(table(mtcars$cyl))

      4       6       8 
0.34375 0.21875 0.43750 
> prop.table(table(cut(mtcars$mpg,c(seq(10,50,10)))))

(10,20] (20,30] (30,40] (40,50] 
 0.5625  0.3125  0.1250  0.0000 

对于二维连表,使用margin.table()和prop.table()按行或者按列计算边界频数与比例

  • margin.table()函数

margin.table(x, margin = NULL)
x:一个数组
margin:一个向量,给出计算其和的边界。例如,对于矩阵1表示行,2表示列,c(1,2)表示行和列。

> x <- xtabs(~cyl+gear,mtcars)
#整个数组的频数
> margin.table(x)
[1] 32
#行的频数
> margin.table(x,1)
cyl
 4  6  8 
11  7 14 
#列的频数
> margin.table(x,2)
gear
 3  4  5 
15 12  5 
#行和列的频数
> margin.table(x,c(1,2))
   gear
cyl  3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
  • prop.table()函数
#按行进行统计
> prop.table(x,1)
   gear
cyl          3          4          5
  4 0.09090909 0.72727273 0.18181818
  6 0.28571429 0.57142857 0.14285714
  8 0.85714286 0.00000000 0.14285714
#按列进行统计
> prop.table(x,2)
   gear
cyl          3          4          5
  4 0.06666667 0.66666667 0.40000000
  6 0.13333333 0.33333333 0.20000000
  8 0.80000000 0.00000000 0.40000000
> prop.table(x)
   gear
cyl       3       4       5
  4 0.03125 0.25000 0.06250
  6 0.06250 0.12500 0.03125
  8 0.37500 0.00000 0.06250
  • addmagrins()函数
> addmargins(x)
     gear
cyl    3  4  5 Sum
  4    1  8  2  11
  6    2  4  1   7
  8   12  0  2  14
  Sum 15 12  5  32
> addmargins(x,1)
     gear
cyl    3  4  5
  4    1  8  2
  6    2  4  1
  8   12  0  2
  Sum 15 12  5
> addmargins(x,2)
   gear
cyl  3  4  5 Sum
  4  1  8  2  11
  6  2  4  1   7
  8 12  0  2  14
> addmargins(x,c(1,2))
     gear
cyl    3  4  5 Sum
  4    1  8  2  11
  6    2  4  1   7
  8   12  0  2  14
  Sum 15 12  5  32
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值