我的数据框(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
...
答案 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.blah
和Val.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