2017-08-17 151 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