如何重塑 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 返回相关模型?

R中的数据重塑函数

将特定行重塑为 R 中的列

通过按字母顺序仅对一行中的一些字段进行排序来重塑 R 中的数据框

R中的重新排序和重塑列[重复]

R语言做的SVM如何输出正确率?