我有一个data.frame
的变量在R
中。让我们称之为var1
var2
... var10
数据帧的多个变量之间的相关
我想找到的var1
对于一个的相关性 var2
,var3
... var10
我们怎样才能做到这一点?
cor
功能可以一次找到2个变量之间的相关性。通过使用我必须编写cor
函数为每个分析
我有一个data.frame
的变量在R
中。让我们称之为var1
var2
... var10
数据帧的多个变量之间的相关
我想找到的var1
对于一个的相关性 var2
,var3
... var10
我们怎样才能做到这一点?
cor
功能可以一次找到2个变量之间的相关性。通过使用我必须编写cor
函数为每个分析
我的包corrr
,这有助于探索相关性,有一个简单的解决方案。我将以mtcars数据集为例,并说我们要关注mpg
与所有其他变量的关联。
install.packages("corrr") # though keep eye out for new version coming soon
library(corrr)
mtcars %>% correlate() %>% focus(mpg)
#> rowname mpg
#> <chr> <dbl>
#> 1 cyl -0.8521620
#> 2 disp -0.8475514
#> 3 hp -0.7761684
#> 4 drat 0.6811719
#> 5 wt -0.8676594
#> 6 qsec 0.4186840
#> 7 vs 0.6640389
#> 8 am 0.5998324
#> 9 gear 0.4802848
#> 10 carb -0.5509251
这里,correlate()
产生的相关数据帧,focus()
让您专注于与所有其他某些变量的相关性。
FYI focus()
与dplyr
软件包的工作方式类似于select()
,只是它改变了行和列。所以如果你熟悉select()
,你会发现使用focus()
很容易。例如:
mtcars %>% correlate() %>% focus(mpg:drat)
#> rowname mpg cyl disp hp drat
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065
#> 2 qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476
#> 3 vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846
#> 4 am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113
#> 5 gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013
#> 6 carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980
另一种方法是使用库Hmisc和corrplot获得相关在所有对,意义和一个漂亮的情节,像这样:
#Your data frame (4 variables instead of 10)
df<-data.frame(a=c(1:100),b=rpois(1:100,.2),c=rpois(1:100,.4),d=rpois(1:100,.8),e=2*c(1:100))
#setup
library(Hmisc)
library(corrplot)
df<-scale(df)# normalize the data frame. This will also convert the df to a matrix.
corr<-rcorr(df) # compute Pearson's (or spearman's corr) with rcorr from Hmisc package. I like rcorr as it allows to separately access the correlations, the # or observations and the p-value. ?rcorr is worth a read.
corr_r<-as.matrix(corr[[1]])# Access the correlation matrix.
corr_r[,1]# subset the correlation of "a" (=var1) with the rest if you want.
pval<-as.matrix(corr[[3]])# get the p-values
corrplot(corr_r,method="circle",type="lower",diag=FALSE,tl.col="black",tl.cex=1,tl.offset=0.1,tl.srt=45)# plot all pairs
corrplot(corr_r,p.mat = pval,sig.level=0.05,insig = "blank",method="circle",type="lower",diag=FALSE,tl.col="black",tl.cex=1,tl.offset=0.1,tl.srt=45)# plot pairs with significance cutoff defined by "p.mat"
你可以使用一个适用声明: '申请(iris [,2:4],2,function(x)cor(x,iris $ Sepal.Length))' –
您可以使用'cor(data.frame)',它将为您提供所有变量之间的相关矩阵。从这个矩阵中提取相关的行/列。 – Sumedh
'cor(dat $ var1,dat [c(“var2”,“var3”,“var4”)])''。所以使用菲利普的例子,'cor(iris $ Sepal.Length,iris [2:4])' – user20650