【问题标题】:correlation many columns with values将许多列与值相关联
【发布时间】:2015-03-19 21:33:44
【问题描述】:

我有很多列的数据框 (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               
...        

【问题讨论】:

  • 您遇到的具体问题是什么?您是否查看过“cor”功能的帮助页面?

标签: r filter correlation


【解决方案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

【讨论】:

  • 本主题中的值是随机的。在我的真实 df 中,我有 15 个变量 & 值不是整数(像 0.689 这样的数字)。 Val(第一个数字列)没有值 1:100 :/
  • @amikoma 使用grep 获取列名(如果我理解评论)y &lt;- x[grep('Val', names(x))] 如果列名是随机的。
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2018-05-11
  • 1970-01-01
  • 2015-04-06
相关资源
最近更新 更多