首页 文章

将许多列与值相关联

提问于
浏览
-2

我有数据框(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

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

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 回答

  • 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
    

相关问题