我在这里找到问题的部分解决方案:How to calculate correlation In R
set.seed(123)
X <- data.frame(ID = rep(1:2, each=5), a = sample(1:10), b = sample(1:10))
ddply(X, .(ID), summarize, cor_a_b = cor(a,b))
除cor
(计算Pearsons r)外,我计算cor.test
(对于p值)。但是在“没有足够的有限观察”的情况下这会失败,所以当一些ID是单独的时,它们经常出现在我的情况下。
所以我需要计算r,只要有超过30对左右的数据,如果我想要的NA少。
第二个问题是cor.test
的详细输出会使结果数据框膨胀 - 即使我唯一需要的是p值。也就是说,如果p实际上是,我理解它是什么。这是r的意义吗?
我只知道t检验,计算r的显着性。
{t-test-value的公式:t = (r·(n-2)^0.5)/(1-r^2)^0.5)
- 但是t还没有意义,否则我会尝试将公式实现到ddply
语句}
答案 0 :(得分:4)
试试这个:
> d <- data.frame(id = rep(1:3, c(5, 1, 10)), a = rnorm(16), b = rnorm(16))
> ddply(d, .(id), summarize, cor_a_b = if(length(id) < 3) {NA} else {cor.test(a, b)$p.value})
id cor_a_b
1 1 0.4393595
2 2 NA
3 3 0.5602855