如果重新格式化您的數據,我想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
a第二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
什麼是你遇到的具體問題?你有沒有檢查'cor'功能的幫助頁面? – agenis 2015-01-21 11:31:17