循环数据帧列表并计算相关系数

时间:2013-03-21 14:24:54

标签: r

我正在使用R-Studio最新版本。

我创建了一堆数据框,我想测试它们的相关性。创建数据框后,我创建了一个变量u,表示所有数据框的范围。我想创建一个循环,遍历data.frame中的每个u并执行以下测试corr(data.frame)

我有以下代码:

corrvals <- NULL
for (i in seq(along=u[])) {
corrvals <- corr(u)
}

我发现了一些我想要做的事情here

问题是,所有data.frame的设置都是我想要的,我只想运行列表中的每个data.frame并运行corr函数在它上面。

我还想打印出data.frame的名称及其相关值,如下所示:

data.frame Corr
ac         -0.03445345
af          0.023429
.
.
.
n           corr(n)

进入我的空存储容器corrvals

谢谢

2 个答案:

答案 0 :(得分:4)

我建议将您的data.frames放入列表中,然后运行lapply。 像这样:

# setting up a reproducible example
data(mtcars)
data(iris)
# remove the last column cause it ain't numeric.
iris <- iris[,-5]
listOfDataFrames <- list()
listOfDataFrames[[1]] <- mtcars
listOfDataFrames[[2]] <- iris

# here's a one liner using base R. 
lapply(listOfDataFrames,cor)

欢迎来到SO,顺便说一句。 啊,我想你的意思是cor,对吗?然而,这基本上适用于任何功能。

答案 1 :(得分:4)

我似乎在这里发布了很多lapply。它是一个方便的包装器,隐藏了循环,但完全符合您的要求......

修改

因为你想要这些名字,所以需要更多参与。 corr函数也来自包boot

u <- list( df1 , df2 , df3 )
attr(u, "names") <- c("df1","df2","df3")
require( boot )
res <- lapply( u , function(x) { names(x) ; corr(x) } )

res
#$df1
#[1] 0.353647

#$df2
#[1] 0.4494202

#$df3
#[1] -0.003907642