在 R 中,我有一个包含类标签C(一个因子)和两个测量值M1和M2的数据框。如何计算每个类中M1和M2之间的相关性?
理想情况下,我会返回一个数据框,其中每个类有一行和两列:类标签C和相关性。
在 R 中,我有一个包含类标签C(一个因子)和两个测量值M1和M2的数据框。如何计算每个类中M1和M2之间的相关性?
理想情况下,我会返回一个数据框,其中每个类有一行和两列:类标签C和相关性。
包 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]