2017-02-20 50 views
0

我有一個數據幀,其中混合了character,integernumeric列類型。如何使用for循環來計算混合列類型的相關性

我有一個特定的列,我想計算相關的所有其他變量,一次一個。

COLUMN NAMES CORRELATION WITH COL X 
variable 1  0.34 
variable 2  0.67 
variable 5  0.98 

正如你可能想象,3和4列可能是character類型,因此沒有相關性可相對於它們運行。

我嘗試了下面的代碼。

mylist <-c() 
for (column in data.frame){ 
    if (class(column) == "integer" | "numeric"){ 

    # stores correlation as a variable 
    x <- cor(dataframe$columnx, column, method = "pearson") 

    # should add both column name and x as a pair to the list 
    mylist <- c(mylist,(list(name(column),x))) 

    } 
} 

我是否正確構建了列表?或者你不能以這種方式使用for循環操作數據框?

回答

1

這裏是你會怎麼做,如果你想保持一個for循環

mylist <-c() 
for(i in colnames(dataframe)) 
{ 
    if (class(dataframe[,which(colnames(dataframe) == i)]) == "integer" | class(dataframe[,which(colnames(dataframe) == i)]) == "numeric") 
{ 
x <- cor(dataframe$columnx, dataframe[,which(colnames(dataframe) == i)], method = "pearson") 
mylist <- c(mylist, (paste(i,x,sep=" "))) 

} 
} 
0

你可以使用keep(is.numeric)從purrr包只保留數字,然後correlate()focus(_variable_)從corrr包獲得與特定變量相關的數據框。這裏有一個虹膜數據的例子(這將降低因子,Species),獲得與Sepal的所有相關性。長度:

library(purrr) 
library(corrr) 

iris %>% 
    keep(is.numeric) %>% 
    correlate() %>% 
    focus(Sepal.Length) 

#> # A tibble: 3 × 2 
#>  rowname Sepal.Length 
#>   <chr>  <dbl> 
#> 1 Sepal.Width -0.1175698 
#> 2 Petal.Length 0.8717538 
#> 3 Petal.Width 0.8179411