将许多列与值相关联

时间:2015-01-21 11:20:21

标签: r filter correlation

我的数据框(df)有很多列,例如

Var(character):  Val(numeric):  Var.1  Val.1  Var.2  val.2  ... var.n  val.n
A                       1        B      5      C       69        n       25
A                       2        B      69     C       66        n       12
A                       3        B      12     C       21        n       12
---------------------------------------------------------------------------
A                       100      B      123    C       19        n       56

我想计算每个变量之间的相关性。这样的事情(价值是完全随机的:

      A        B          C         ...           
A     0.25     0.32       0.1256                  
B     0.9      0.47       0.125    
C     0.36     0.12       0.87               
...        

1 个答案:

答案 0 :(得分:1)

如果您重新格式化数据,我认为cor()函数可以完全按照您的要求执行:

x <- data.frame(Var=rep('A',100), Val=1:100, Var.1=rep('B',100), Val.1=as.integer(runif(1:100,1,100)), Var.2=rep('C',100), Val.2=as.integer(runif(1:100,1,100)) );
y <- data.frame(A=x$Val, B=x$Val.1, C=x$Val.2 );
cor(y);

提供输出:

              A          B             C
A  1.0000000000  0.1137819 -0.0007431031
B  0.1137819231  1.0000000 -0.1197911609
C -0.0007431031 -0.1197912  1.0000000000

以上代码适用于任何数值。如果要自动化提取Var名称和值的过程,可以使用它(添加Var.blahVal.blah来证明它的一般性):

x <- data.frame(Var=rep('A',100), Val=1:100, Var.1=rep('B',100), Val.1=as.integer(runif(1:100,1,100)), Var.2=rep('C',100), Val.2=as.integer(runif(1:100,1,100)), Var.blah=rep('D',100), Val.blah=as.integer(runif(1:100,1,100)), stringsAsFactors=F );
suffixes <- gsub('Val','',names(x)[grep('Val',names(x))]);
y <- data.frame(); for (suffix in suffixes) y[1:nrow(x),x[1,paste0('Var',suffix)]] <- x[paste0('Val',suffix)];
cor(y);

提供输出:

           A           B           C           D
A  1.0000000 -0.30723601 -0.16862348  0.13557243
B -0.3072360  1.00000000  0.03207434 -0.14573943
C -0.1686235  0.03207434  1.00000000 -0.08735973
D  0.1355724 -0.14573943 -0.08735973  1.00000000