如何在 R 中找出分组相关系数?


如果 R 数据框中有两个连续列和一分类列,我们可以找出分类列中的类别连续值之间的相关系数。为此,我们可以使用 by 函数,并使用下例所示的方式传入采用 spearman 方法的 cor 函数。

示例 1

考虑以下数据框

实时演示

> x1<-sample(c("A","B","C"),20,replace=TRUE)
> y1<-rnorm(20,1,0.24)
> z1<-rpois(20,2)
> df1<-data.frame(x1,y1,z1)
> df1

输出

  x1   y1    z1
1 A 1.1155324 2
2 C 0.9801564 3
3 B 0.9116162 1
4 A 0.8406772 3
5 C 0.8009355 2
6 A 0.9331637 2
7 B 1.0642089 1
8 B 1.1633515 0
9 B 1.1599037 5
10 B 1.0509981 2
11 B 0.7574267 1
12 B 0.8456225 1
13 B 0.8926751 2
14 B 0.6074419 3
15 C 0.7999792 0
16 A 1.0685236 2
17 B 0.9756677 3
18 A 0.9495342 0
19 C 1.0109747 2
20 A 0.9090985 4

查明 x1 中类别 y1 和 z1 之间相关性

示例

> by(df1,df1$x1,FUN=function(x) cor(df1$y1,df1$z1,method="spearman"))
df1$x1: A

输出

[1] 0.03567607

示例

df1$x1: B

输出

[1] 0.03567607

示例

df1$x1: C

输出

[1] 0.03567607

示例 2

实时演示

> x2<-sample(c("India","China","France"),20,replace=TRUE)
> y2<-rexp(20,0.335)
> z2<-runif(20,2,10)
> df2<-data.frame(x2,y2,z2)
> df2

输出

    x2      y2         z2
1 France 2.31790394 2.649538
2 China 10.61012173 8.340615
3 France 5.00085220 6.602884
4 France 1.67707140 7.722530
5 India 9.60663732 9.837268
6 France 1.46030289 5.370930
7 France 10.44614704 9.035748
8 India 0.39506766 6.318701
9 China 1.83071453 7.282782
10 China 0.23080001 7.210144
11 India 2.27763766 9.233019
12 China 18.21276888 9.928614
13 France 1.72085517 9.176826
14 India 4.77786071 8.899026
15 China 8.55501571 7.240147
16 China 0.19832026 5.641800
17 India 0.03113389 6.928705
18 China 0.56958471 3.496314
19 China 0.72728737 6.903436
20 India 8.73571474 5.286486

查明 x2 中类别 y2 和 z2 之间相关性

示例

> by(df2,df2$x2,FUN=function(x) cor(df2$y2,df2$z2,method="spearman"))
df2$x2: China

输出

[1] 0.487218

示例

df2$x2: France

输出

[1] 0.487218

示例

df2$x2: India

输出

[1] 0.487218

更新于:2020 年 11 月 23 日

852 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.