R:按组计算相关性

机器算法验证 r 相关性
2022-02-03 19:10:16

在 R 中,我有一个包含类标签C(一个因子)和两个测量值M1M2的数据框。如何计算每个类中M1M2之间的相关性?

理想情况下,我会返回一个数据框,其中每个类有一行和两列:类标签C和相关性。

4个回答

包 plyr 是要走的路。

这是一个简单的解决方案:

xx <- data.frame(group = rep(1:4, 100), a = rnorm(400) , b = rnorm(400) )
head(xx)

require(plyr)
func <- function(xx)
{
return(data.frame(COR = cor(xx$a, xx$b)))
}

ddply(xx, .(group), func)

输出将是:

  group         COR
1     1  0.05152923
2     2 -0.15066838
3     3 -0.04717481
4     4  0.07899114

如果您倾向于使用基础包中的函数,可以使用该by函数,然后重新组装数据:

xx <- data.frame(group = rep(1:4, 100), a = rnorm(400) , b = rnorm(400) )
head(xx)

# This returns a "by" object
result <- by(xx[,2:3], xx$group, function(x) {cor(x$a, x$b)})

# You get pretty close to what you want if you coerce it into a data frame via a matrix
result.dataframe <- as.data.frame(as.matrix(result))

# Add the group column from the row names
result.dataframe$C <- rownames(result)

另一个使用基础包和 Tal 示例数据的示例:

DataCov <- do.call( rbind, lapply( split(xx, xx$group),
             function(x) data.frame(group=x$group[1], mCov=cov(x$a, x$b)) ) )

使用 data.table 比 dplyr 短

dt <- data.table(xx)
dtCor <- dt[, .(mCor = cor(M1,M2)), by=C]