我的数据框中包含混合的character
,integer
和numeric
列类型。
我有一个特定的列,我希望计算与所有其他变量相关的关联,一次一个。
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循环操作数据帧吗?
答案 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