0

これは簡単なように思えますが、私はデータフレームを持っており、可能なペアごとにスコアの相関関係を抽出する必要がありますid(trialつまり、トライアル 10 の ID 1 のスコアとトライアル 10 の ID 2 のスコアを比較します, ID 1トライアル 10 の ID 3 からトライアル 10 の ID 3 など、データ フレームの例は次のとおりです。

id <- c('1','1','1','2', '2', '2', '3', '3', '3')
trial <- c('10','11','12','10', '11', '12', '10', '11', '12')
score<- c('634', '981','101', '621', '31', '124', '827', '404', '92')
d <- data.frame(id, trial, score)

d

 id trial score
  1    10   634
  1    11   981
  1    12   101
  2    10   621
  2    11    31
  2    12   124
  3    10   827
  3    11   404
  3    12    92

結果は、すべての可能な組み合わせの相関を持つ新しいマトリックスになるはずです。表向きは、ID 全体でスコアの信頼性を評価するためのものです。

データの長さは約 10000 行で、R が詰まる原因になります。combここのフォーラムを調べて、 orを使用して理解しようとしましたouterが、構文に混乱しました。どんな助けでも大歓迎です!

4

3 に答える 3

1

@Roland のアイデアに基づいていますが、R ベース関数を使用していますxtabs

> d$score <- as.numeric(as.character(d$score))
> cor(xtabs(score ~ trial + id, data=d))
            1           2         3
1  1.00000000 -0.02568439 0.5295394
2 -0.02568439  1.00000000 0.8344046
3  0.52953942  0.83440458 1.0000000
于 2013-10-31T10:09:56.333 に答える
0

ID が多すぎない場合は、ここでデータを再形成し、cor入力として data.frame を受け入れるものを使用します。

d$score <- as.numeric(as.character(d$score))
library(reshape2)
d1 <- dcast(d,trial~id)
cor(d1[,-1])
#            1           2         3
#1  1.00000000 -0.02568439 0.5295394
#2 -0.02568439  1.00000000 0.8344046
#3  0.52953942  0.83440458 1.0000000
于 2013-10-31T08:14:42.830 に答える
0

これを実現する 1 つの方法は、data.table を使用することです。以下を使用できます

library(data.table)
d.t <- data.table(d)
setkey(d.t,"trial","id")

そして、このようなものが役立つはずです。

temp <- cor(as.vector(d.t[J("10","1")]$score),as.vector(d.t[J("10","2")]$score))

これを投稿して、これにループを配置するか、sapply を使用して、結果をマトリックス/データ フレームに再バインドすることができます

HTH

于 2013-10-31T07:44:51.137 に答える