2017-08-17 58 views
0

样本数据集如下:查找相关

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循环对于这个练习,我想诊断功能,但我想它按行计算行,是有办法,我可以做到这一点使用应用或一些类似的快节奏的功能

回答

0

您可以使用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]])) 
+0

这几乎不会是唯一需要的是什么,如果我要选择前5个存储具有与储存装置2的相关性最高,然后我该怎么办找到这些值和商店号码。当我使用上述公式为我的数据集包含4个商店我得到0.5169370 0.3946689 0.3859648 0.7030863 0.8703083 0.8592434。现在这是4C2店面的组合,但如果我想找出与店铺2具有最高相关性的两家顶级店面,那么我该怎么做 – bakas

0

你也可以使用一个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 
+0

这就是我需要的兴奋点,唯一的小打嗝就是我想要的由于某些特定的要求,使用dcor函数代替cor函数。问题是dcor函数需要两个参数,即需要计算相关性的变量,这就是为什么此代码与dcor函数失败 – bakas