如何重塑 R 中的相关输出(非透视结果数据)?
Posted
技术标签:
【中文标题】如何重塑 R 中的相关输出(非透视结果数据)?【英文标题】:How to reshape correlation output in R (un-pivoting result data)? 【发布时间】:2019-01-01 04:26:30 【问题描述】:我有一些用于计算相关性的旧代码,现在想使用R
解决方案,因为它更快。
有以下代码:
DROP TABLE IF EXISTS #DummyData
CREATE TABLE #DummyData
(
[VariableA] VARCHAR(24)
,[VariableB] VARCHAR(24)
,[Value] SMALLINT
)
INSERT INTO #DummyData([VariableA], [VariableB], [Value])
VALUES ('A1','B1', 4)
,('A1','B2', 3)
,('A1','B3', 1)
,('A2','B1', 2)
,('A2','B2', 1)
,('A2','B3', 3)
,('A3','B1', 4)
,('A3','B2', 5)
,('A3','B3', 2);
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
library(reshape)
pivotData <- cast(DataIn, VariableA ~ VariableB,fun.aggregate = max)
curData <- cor(pivotData)
DataOut <- data.frame(curData)
'
, @input_data_1 = N'SELECT [VariableA], [VariableB], [Value] FROM #DummyData'
, @input_data_1_name = N'DataIn'
, @output_data_1_name = N'DataOut';
我们有这个输出:
有没有办法使用一些R
库函数变成这个?
【问题讨论】:
我看不出这怎么可能是一个重复的问题?为了重塑工作,您有两个额外的列包含这些值。关联后我只有结果(没有这样的细节)甚至列标题。 这就是我需要的 - ***.com/questions/28035001/… 【参考方案1】:你可以跑:
library(tidyverse)
DataOut %>%
rownames_to_column("variable_b1") %>%
gather(key = variable_b2, val = Rho, -variable_b1)
结果:
variable_b1 variable_b2 Rho
1 B1 B1 1.0000000
2 B2 B1 0.8660254
3 B3 B1 -0.8660254
4 B1 B2 0.8660254
5 B2 B2 1.0000000
6 B3 B2 -0.5000000
7 B1 B3 -0.8660254
8 B2 B3 -0.5000000
9 B3 B3 1.0000000
【讨论】:
【参考方案2】:如果你得到一个矩阵的结果,你可以这样做:
## Set the row and column names
dimnames(mat) <- list(rownames(mat, do.NULL = FALSE, prefix = "B"),
colnames(mat, do.NULL = FALSE, prefix = "B"))
## melt and set the variable names as desired
setNames(reshape2::melt(mat), c("VariableB_1", "VariableB_2", "Rho"))
# VariableB_1 VariableB_2 Rho
# 1 B1 B1 1.00
# 2 B2 B1 0.86
# 3 B3 B1 -0.86
# 4 B1 B2 0.86
# 5 B2 B2 1.00
# 6 B3 B2 -0.50
# 7 B1 B3 -0.86
# 8 B2 B3 -0.50
# 9 B3 B3 1.00
【讨论】:
以上是关于如何重塑 R 中的相关输出(非透视结果数据)?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据数据透视表中两列(两个外键)中的 ID 返回相关模型?