这看起来应该很简单,但我有一个数据框架,需要在trial中提取每个可能的一对trial的得分之间的相关性(换句话说,将试验10的id 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结果应该是一个具有所有可能组合的相关性的新矩阵。表面上,它是用来评估整个ids的得分可靠性。
数据大约有10000行长,这导致R堵塞。我在这里查看过论坛,并试图使用comb或outer来解决这个问题,但是被语法搞糊涂了。任何帮助都将不胜感激!
发布于 2013-10-31 10:09:56
基于@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-31 07:44:51
实现这一目标的一种方法是使用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))发布后,这可能会在此周围设置一个循环,或者使用,然后将结果重新绑定到一个矩阵/数据框架中。
HTH
https://stackoverflow.com/questions/19699560
复制相似问题