如何将多列转换为数值并找到相关系数

时间:2019-07-06 03:22:59

标签: r loops iteration correlation

我有一个通过避风港读取的数据集“ res.sav”。它包含20列,分别称为“ Genes1_Acc4”,“ Genes2_Acc4”等。我正在尝试查找与这些列之间的相关系数,即“ Condition”。我想单独列出所有系数。

我创建了两个函数cor.condition.cols和cor.func来实现。第一个遍历文件名即可正常工作。第二个应该给我我的相关性,这根本不起作用。我还创建了一个新的“ cor.condition.Genes”,我想用相关性来填充,最好是矩阵或数据框。

我尝试用两个函数遍历各列。但是,当我尝试通过它时,出现错误:“转换引入的NA”。这不会是世界的尽头(我尝试过也抑制了Warning())。但更大的问题是,我的函数似乎无法将所述列转换为cor()函数所需的数值类型。尝试运行cor()函数时收到“ y必须是数字”错误。我试图将多个参数放入“''或“”中,但没有成功。

当我运行str(cor.condition.cols)时,我只收到字符串,这使我认为我的函数在某种程度上与as.numeric函数混为一谈。关于我还可以如何遍历这些列并进行传输的任何建议?

谢谢大家:)

cor.condition.cols <- lapply(1:20, function(x){paste0("res$Genes", x, "_Acc4")})

#save acc_4 columns as numeric columns and calculate correlations
res <- (as.numeric("cor.condition.cols"))
cor.func <- function(x){
  cor(res$Condition, x, use="complete.obs", method="pearson")
}

cor.condition.Genes <- cor.func(cor.condition.cols)

1 个答案:

答案 0 :(得分:1)

您可以这样做:

cor.condition.cols <- paste0("Genes", 1:20, "_Acc4")
res2 <- as.numeric(as.matrix(res[cor.condition.cols]))
cor.condition.Genes <- cor(res2, res$Condition, use="complete.obs", method="pearson")

最终是简短的变体:

cor.condition.cols <- paste0("Genes", 1:20, "_Acc4")
cor.condition.Genes <- cor(res[cor.condition.cols], res$Condition, use="complete.obs")

以下是其他数据的示例:

cor(iris[-(4:5)], iris[[4]])