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

使用for循环在df中选择列之间的相关性,r,for-loop,dataframe,correlation,R,For Loop,Dataframe,Correlation,我有一个数据帧(df),有8列。我想使用for循环来计算选定列的Pearson相关性,方法如下: cor1=cor(df[,1], df[,2]) cor2=cor(df[,3], df[,4]) 等等。最好的方法是什么 最简单的方法就是计算相关矩阵,然后您可以根据需要为其编制索引: df <- data.frame(rnorm(10),rnorm(10),rnorm(10)) corMat <- cor(df) df <- data.frame(rnorm(10),rno

我有一个数据帧(
df
),有8列。我想使用
for
循环来计算选定列的Pearson相关性,方法如下:

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

等等。最好的方法是什么

最简单的方法就是计算相关矩阵,然后您可以根据需要为其编制索引:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10))
corMat <- cor(df)
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]))
}
或者你真的需要在不同的对象中有特定的相关性吗

编辑 下面是一个您想要的for循环示例:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10))
corMat <- cor(df)
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]))
}

df最简单的方法就是计算相关矩阵,然后您可以根据需要对其进行索引:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10))
corMat <- cor(df)
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]))
}
或者你真的需要在不同的对象中有特定的相关性吗

编辑 下面是一个您想要的for循环示例:

df <- data.frame(rnorm(10),rnorm(10),rnorm(10))
corMat <- cor(df)
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]))
}

df您可以将
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

df您可以将
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

dfHallo Sascha,非常感谢您的评论。但它必须是一个for循环,用于计算每对变量的相关性,例如1)cor1=cor(col1,col2),cor2=cor(col3,col4)等等。为什么它必须是for循环?这在R中是非常低效的编程。如果这是一个家庭作业,请将其标记为这样。不管怎样,我有一个办法。你好,萨沙,非常感谢你的评论。但它必须是一个for循环,用于计算每对变量的相关性,例如1)cor1=cor(col1,col2),cor2=cor(col3,col4)等等。为什么它必须是for循环?这在R中是非常低效的编程。如果这是一个家庭作业,请将其标记为这样。无论如何,我有一个办法。