【发布时间】:2019-01-04 12:49:54
【问题描述】:
目前我正在使用reshape 库来透视 R 中的数据,但是当我有很多列(4000+)时它似乎很困难。是否有任何多线程替代此功能(类似于 MS 的 RevoScaleR 包)或任何更好的方法来做到这一点?
这是我现在拥有的代码示例:
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)
DataOut <- pivotData
'
, @input_data_1 = N'SELECT [VariableA], [VariableB], [Value] FROM #DummyData'
, @input_data_1_name = N'DataIn'
, @output_data_1_name = N'DataOut';
此查询返回以下结果:
【问题讨论】:
-
SQL Server 使用 Revo R。此外,你想做什么?你真的有一个有 4000 列的表吗?还是您想将 4000 行转换为 3 行?
-
SQL Server 是多线程的,速度很快。您可以使用 SQL Server 聚合数据,按 VarA、VarB 分组并将结果转置为 4K 列宽的数据框。
-
@PanagiotisKanavos 我怀疑使用 T-SQL 创建具有 4000 多列的
PIVOT会比一些R函数更快。 -
我在 R 中进行数据透视的原因是我将使用 R 中的这些数据进行额外的计算,并且我需要这种格式的数据。在将数据传递给 R 脚本之前,我尝试过对数据进行透视,但这样会慢很多。
标签: r sql-server tsql sql-server-2016 microsoft-r