创建 table 显示各种变量与另一个序列的排序绝对相关性

Create table showing the sorted absolute correlation of various variables with another series

我希望输出显示每个 X 变量的名称、它与另一个序列的符号相关性及其绝对相关性,按绝对相关性降序排列。

使用以下代码,我能够计算出序列(对象 res1)和 X 变量(位于 data2 数据帧内)之间的相关性。

cor(data2, res1, method = c("pearson"))

以上代码生成了以下在控制台中垂直显示的输出。

         [,1]
x1 0.45683210
x2 0.62858863
x3 0.08457911
x4 0.41022052

接下来,使用以下代码,我能够使用 sort() 函数按绝对值对这些相关性进行排序。

abs(cor(data2, res1, method = c("pearson")))
abs1<-abs(cor(data2, res1, method = c("pearson")))
sort(abs1, decreasing = TRUE)

而且,我得到了以下输出。

[1] 0.62858863 0.45683210 0.41022052 0.08457911 

我想生成一个看起来像 table 或数据框的输出。

在第一列中,您将看到 X 变量的标签。
在第二列中,您将获得它们的绝对相关性。
在第三列中,您将获得实际相关性。

并且,此垂直表格列表将按降序排列。我想我有我需要的所有信息。我只需要代码来生成指定的输出。

我想我理解你的问题,但我不是 100% 确定。

我从一些示例数据开始。我凭眼睛知道 x1 和 x2 不太合适,x3 非常合适,x4 几乎一样好。

res1 <- c(0, 5, 2, 7, 1)
data2 <- data.frame(x1 = 1:5,           # uncorrelated
                x2 = 14:10,             # uncorrelated and wrong direction
                x3 = c(0, 5, 1, 6, 0),  # very similar
                x4 = c(0, 0, 2, 7, 1))  # somewhat similar

我的回答依赖于dplyr,不是最简洁的,但应该很清楚。

library(dplyr)
cor(data2, res1, method = "pearson") %>% 
  tibble::as.tibble(rownames = "X_var") %>% # Edit: using suggestion in comment, was
         # as.data.frame() %>% tibble::rownames_to_column(varrownames = "X_var") %>%  
  convert row names into a new column "X_var" 
  mutate(abs_cor = abs(V1)) %>%          # add absolute correlation
  arrange(-abs_cor) %>%                  # sort by descending abs correlation
  select(X_var, abs_cor, cor = V1)       # display in order and rename V1

输出

  X_var   abs_cor        cor
1    x3 0.9822125  0.9822125
2    x4 0.7058824  0.7058824
3    x1 0.2169305  0.2169305
4    x2 0.2169305 -0.2169305

@Jon Spring 的回答非常完美。这是 base R

中的相同代码
res1 <- c(0, 5, 2, 7, 1)
data2 <- data.frame(x1 = 1:5,           # uncorrelated
                    x2 = 14:10,             # uncorrelated and wrong direction
                    x3 = c(0, 5, 1, 6, 0),  # very similar
                    x4 = c(0, 0, 2, 7, 1))  # somewhat similar

correlation = cor(data2, res1, method = "pearson")
names = rownames(correlation)
abs_cor = abs(correlation)
data = data.frame(X_var = names,abs_cor = abs_cor,cor = correlation)
data[order(data$abs_cor,decreasing = TRUE),]

Sada93 的回答,如上图很棒。我现在已经多次使用这组代码并且它们运行良好。但是,我发现他使用 order() 函数按降序对绝对相关性进行排序的最后一行代码可以通过使用 R Studio 中的查看器并通过单击 abs(相关性)上方的降序排序来简单地替换柱子。