R中组之间的相关性

问题描述

df <- data.frame(row.names = c('S.5.0U0','S.6.0U1','S.7.0U2','S.8.0U3'),vara=c(-1.2,15,8.5,0),varb=c(-29,29,2.6,5),var1=c(-0.5,1.5,58,var2=c(-2.09,-12,-0.75),var3 = c(0,0.056,5.5))
> df
        vara  varb var1   var2  var3
S.5.0U0 -1.2 -29.0 -0.5  -2.09  0
S.6.0U1 15.0  29.0  1.5 -12.00  0.056
S.7.0U2  8.5   2.6 58.0   2.60  -12
S.8.0U3  0.0   5.0  0.0  -0.75  5.5

我想将varavar1var2var3相关联,并且我想将varbvar1,{{1 }},var2

我尝试过了...

var3

...那

ab <- subset(df,select = c(`vara`,`varb`))
other <- subset(df,select = c(`var1`,`var2`,`var3`))

for(n in 1/length(other)){
  n
  for(t in 1/length(ab){
    t
    corr <- broom::tidy(cor.test(n,t))
  }
}

Error in cor.test.default(nutrient,taxa) : 
  not enough finite observations

它不起作用。 我见过Correlation between multiple variables of a data frame 问题在于,在我的真实数据中,我想要关联的两组非常好,因此我确实需要诸如apply(df[,c(1:2)],2,function(x) cor.test(x,df[,c(3:5)]) ) loop之类的东西。

谢谢

编辑:问题的说明:

我想使用apply,因为我想获得列表中的相关系数以及p值。当我仅使用cor.test时发生此错误cor.test(df)

解决方法

尝试一下

基本

cor(df)[1,3:5]
cor(df)[2,3:5]

cor(df)[1:2,3:5]

tidyverse

library(tidyverse)
map_dbl(df[3:5],~ cor(df$vara,.x))
map_dbl(df[3:5],~ cor(df$varb,.x))
,

您可以使用pivot_longer()列出要相互关联的变量的所有组合。然后,您可以使用group_by()计算p值并估算所有组合之间的相关性:

library(tidyr)
library(dplyr) 

df %>% 
  pivot_longer(names_to = "variable_right",values_to = "value_right",var1:var3) %>% 
  pivot_longer(names_to = "variable_left",values_to = "value_left",vara:varb) %>% 
  group_by(variable_left,variable_right) %>% 
  summarise(p.value = cor.test(value_left,value_right)$p.value,estimate = cor.test(value_left,value_right)$estimate)