使用for循环在df中选择列之间的相关性

时间:2012-05-11 10:00:42

标签: r for-loop dataframe correlation

我有一个包含8列的数据框(df)。我想使用for循环以下列方式计算选择列的Pearson相关性:

cor1=cor(df[,1], df[,2])
cor2=cor(df[,3], df[,4])

等等。做这个的最好方式是什么?

2 个答案:

答案 0 :(得分:1)

最简单的只是计算相关矩阵,然后你可以根据需要对其进行索引:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10))
corMat <- cor(df)

例如,变量1和2之间的相关性:

corMat[1,2]

或者你真的需要在不同的对象中有特定的相关性吗?

修改

以下是您想要的for循环示例:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10),rnorm(10))

for (i in seq(1,ncol(df),by=2))
{
    assign(paste("cor",i/2+0.5,sep=""),cor(df[,i],df[,i+1]))
}

虽然效率很低。

答案 1 :(得分:0)

您可以将apply与广义函数结合使用:

df<-data.frame(a=rnorm(10),b=rnorm(10),c1=rnorm(10),d=rnorm(10))
f<- function(x) {
  cc=x[1] #column index
  if (cc<ncol(df)){
    cor(x[-1],df[,cc+1]) #ignore 1st element [-1]
  }
}

apply(rbind(1:dim(df)[2], 2, f) #apply over columns after adding a column id numbers at the top row

可能有一个R函数来获取apply函数中的列/行id吗?在这种情况下,我们不需要对列ID进行处理。