如何使用for循环计算与混合列类型的相关性

时间:2017-02-20 05:16:35

标签: r

我的数据框中包含混合的characterintegernumeric列类型。

我有一个特定的列,我希望计算与所有其他变量相关的关联,一次一个。

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循环操作数据帧吗?

2 个答案:

答案 0 :(得分: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=" ")))

}
} 

答案 1 :(得分:0)

您可以使用purrr包中的keep(is.numeric)仅保留数字,然后从corrr包中保留correlate()focus(_variable_)以获取与特定变量相关的数据帧。这是虹膜数据的一个例子(它将丢弃因子Species),获得与Sepal.Length的所有相关性:

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