我希望输出显示每个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
我想生成一个看起来像表或数据帧的输出。
在第一列中,您将拥有X变量的标签。 在第二列中,您将具有绝对相关性。 在第三列中,您将获得实际的相关性。
并且,此垂直表格列表将按降序排列。我想我有我需要的所有信息。我只需要代码来生成指定的输出。
回答@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),]
我想我理解你的问题,但我不是百分百肯定。
我从一些示例数据开始。我通过眼睛知道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
Sada93回答,如上图所示很棒。我现在已经多次使用这组代码,它们工作得很好。但是,我发现他使用order()函数按降序排序绝对相关性的最后一行代码可以简单地用R Studio中的Viewer替换,并通过单击abs(相关)上面的降序排序柱。