2015-01-21 69 views
-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 

我想計算每個變量之間的相關性。類似的東西(的值是完全隨機的:

 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

什麼是你遇到的具體問題?你有沒有檢查'cor'功能的幫助頁面? – agenis 2015-01-21 11:31:17

回答

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 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 
+0

本主題中的值是隨機的。 在我真正的DF我有15變量&值不是整數(數字像0.689)。 Val(第一個數字列)沒有值1:100:/ – amikoma 2015-01-21 11:39:47

+0

@amikoma使用'grep'獲取列名(如果我理解了註釋)'y < - x [grep('Val',names(x ))]'如果列名是隨機的。 – akrun 2015-01-21 11:46:28