2017-11-22 5 views
1

私は、異なる評価者によって測定されたデータフレームを持っており、評価者間の測定値の相関を計算したいと考えています。私は上記のネストされたループを嫌い、そして好ましくは私の問題にアプローチtidyverse/dplyrを見つけたいグループによる測定値間の相関

set.seed(123) 
df <- data.table(
groups = rep(seq(1, 4, 1),100), 
measurement = runif(400) 
) 

cormat <- matrix(ncol=length(unique(df$groups)), nrow=length(unique(df$groups))) 

for (i in unique(df$groups)){ 
    for (j in unique(df$groups)){ 

    cormat[i,j] <- cor(df[groups==i,]$measurement, df[groups==j,]$measurement) 
}} 

はここでダミーデータと私の現在の実装です。

予想される出力は次のようになります。

> cormat 
      [,1]  [,2]  [,3]  [,4] 
[1,] 1.0000000 -0.10934904 -0.15159825 0.13237094 
[2,] -0.1093490 1.00000000 -0.04278137 -0.02945215 
[3,] -0.1515983 -0.04278137 1.00000000 0.04203516 
[4,] 0.1323709 -0.02945215 0.04203516 1.00000000 

(この質問は前に頼まれていた場合の謝罪は、私は良い検索用語を見つけるのに苦労しました)

+1

[R data.tableのグループ間の相関](https://stackoverflow.com/questions/22421542/correlation-between-groups-in-r-data-table) – Koot6133

+0

ご意見ありがとうございます!これは便利ですが、私はよりエレガントな下にtidyverseアプローチを見つける。 –

答えて

3

ここではtidyverseアプローチです。

  1   2   3   4 
1 1.0000000 -0.10934904 -0.15159825 0.13237094 
2 -0.1093490 1.00000000 -0.04278137 -0.02945215 
3 -0.1515983 -0.04278137 1.00000000 0.04203516 
4 0.1323709 -0.02945215 0.04203516 1.00000000 

library(tidyverse) 
df %>% 
arrange(groups) %>% 
add_column(index = rep(1:100, times = 4)) %>% 
spread(groups, measurement) %>% 
select(-index) %>% 
cor() 

結果は、我々はデータを広げるために、一意の識別子を持つようにインデックス列を必要としています。

+0

これは完璧です。ありがとう! –

関連する問題