查找数据框的多行与同一数据框中的另一行之间的相关性

  • 本文关键字:数据 一行 相关性 之间 查找 r
  • 更新时间 :
  • 英文 :


示例数据集如下:

samp_data=data.frame(str=c(1,1,1,1,2,2,2,2,3,3,3,3),week=c(1,2,3,4,1,2,3,4,1,2,3,4),var1=c(1,3,4,1,1,3,1,1,1,1,1,1),var2=c(2,2,2,2,2,2,2,2,2,2,2,2))
> samp_data
str week var1 var2
1    1    1    1    2
2    1    2    3    2
3    1    3    4    2
4    1    4    1    2
5    2    1    1    2
6    2    2    3    2
7    2    3    1    2
8    2    4    1    2
9    3    1    1    2
10   3    2    1    2
11   3    3    1    2
12   3    4    1    2

我想做的是找到数据框中每个商店与其他商店的相关性,唯一的问题是每个商店都有多行。所以我想要的是这样的东西

require(energy)
DCOR(samp_data[samp_data$str==1,c("var1")],samp_data[samp_data$str==2,c("var1")])
$dCov
[1] 0.5303301
$dCor
[1] 0.5639143
$dVarX
[1] 1.179248
$dVarY
[1] 0.75

如您所见,我发现所有具有存储 1 的行与具有存储 2 的所有行之间的相关性。

我不想在这个练习中使用 for 循环,我想到了诊断函数,但我想它会逐行计算,有没有办法使用 apply 或一些类似的快节奏函数来做到这一点

您可以按如下方式使用combn

combn(unique(samp_data$str), 2, function(i) 
cor(samp_data$var1[samp_data$str == i[1]], samp_data$var1[samp_data$str == i[2]]))

您也可以使用dplyrtidyr方式:

library(tidyverse)
samp_data %>% 
select(str, var1) %>% 
group_by(str) %>% 
mutate(n=1:n()) %>% 
spread(str, var1 ) %>% 
select(-n) %>% 
cor(.)
1         2  3
1 1.0000000 0.3333333 NA
2 0.3333333 1.0000000 NA
3        NA        NA  1

最新更新