2016-12-21 68 views
-1

我需要能夠按列計算數據幀的相關係數。例如,我的數據幀是這樣的:如何計算數據框中某些列的相關性?

dput(df) 
structure(list(Server = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L), 
.Label = c("server101", "server102"), class = "factor"), 
JVM = structure(c(1L, 2L, 3L, 4L, 2L, 3L, 4L), 
.Label = c("JVM1", "JVM2", "JVM3", "JVM4"), 
class = "factor"), cpu = c(10L, 20L, 30L, 20L, 10L, 20L, 20L), 
trans = c(1000L, 2000L, 30L, 30L, 50L, 60L, 30L)), 
.Names = c("Server", "JVM", "cpu", "trans"), 
class = "data.frame", row.names = c(NA, -7L)) 

我需要能夠由每個JVM和服務器計算的CPU和反式之間係數的相關性。

我已經試過這樣:

apply(df[,c('trans','cpu')], function(x) FUN=cor(x["trans"],x["cpu"])) 

任何想法我怎麼能做到這一點?

回答

2

有一個基礎R的方式做到這一點,但我可能會使用dplyr

如果您的數據幀被稱爲structure,試試這個:

library(dplyr) 
structure %>% group_by(JVM) %>% summarize(cor = cor(trans,cpu)) 
+0

它需要按服務器分組而不是JVM – user1471980

+0

是否需要按兩者進行分組?也許舉一個結果應該是什麼樣子的例子 –

1

你不能得到相關出於一個數據點,但假設您的真實數據每個服務器/ jvm擁有更多數據點,請嘗試此代碼。它不使用任何套餐:

out <- tapply(1:nrow(df), df[1:2], function(i) with(df[i, ], cor(cpu, trans))) 

捐贈:

> out 
      JVM 
Server  JVM1 JVM2 JVM3 JVM4 
    server101 NA NA NA NA 
    server102 NA NA NA NA 

如果你喜歡一個長形則:

ftable(out, row.vars = 1:2) 

,並提供:

Server JVM  
server101 JVM1 NA 
      JVM2 NA 
      JVM3 NA 
      JVM4 NA 
server102 JVM1 NA 
      JVM2 NA 
      JVM3 NA 
      JVM4 NA 
2

我們可以使用data.table

library(data.table) 
setDT(df)[, .(Cor = cor(trans,cpu)), by = JVM] 
相關問題