2013-10-31 51 views
0

這看起來應該是直截了當的,但我有一個數據框,需要提取trial中每個可能的id對的分數的相關性(換句話說,比較ID爲1的分數試驗10至ID 2在試驗10中,在試驗10 ID 1至ID 3試驗體10,等等。的示例數據幀如下。有效提取R中的成對相關性

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窒息。我已經在這裏看了論壇,並試圖找出使用combouter但語法混淆。任何幫助將非常感激!

回答

1

基於@羅蘭的想法,但使用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 
+1

以前從未使用過xtabs,這看起來很方便! – amurphy

0

達到此目的的一種方法可能是使用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使用,然後將結果rbind成矩陣/數據幀

HTH

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