有效地提取R中的成对相关

时间:2013-10-31 06:11:44

标签: r iteration reliability

这似乎应该是直截了当但我有一个数据框,需要提取id之间每个可能的trial对的分数相关性(换句话说,比较id的分数试验10中的1到试验10中的id 2,试验10中的id 1和试验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窒息。我在这里查看了论坛,并尝试使用combouter来解决这个问题,但对语法感到困惑。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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然后将结果转换为矩阵/数据框

HTH

答案 2 :(得分: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