Лучший способ сделать кросс-табуляцию по одному столбцу с R - PullRequest
1 голос
/ 27 июня 2019

У меня есть следующий случай, в котором TSQL процедура немного медленная, и я ищу замену, возможно, в R:

I want to do a cross tabulation over example table:

surveyID    QuestionID  AnswerID
1000        1       1
1000        2       3
1000        3       2
1000        4       1
1001        1       3
1001        2       2
1001        3       1
1001        4       3

И чтобы получить результаты вроде:

QuestionIDx QuestionIDy AnswerIDx   AnswerIDy   Frequancy
1       1       1       2       x
1       1       1       3       x
1       1       2       3       x
.....

Я в основном оставляю себе присоединение к таблице самостоятельно на surveyID, а затем я использую функции R table или xtabs для получения частот.

INSERT INTO #CrossTabResults([ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy], [Frequency])
    EXECUTE sp_execute_external_script
  @language =N'R',
  @script=N'
  OutputDataSet <- data.frame(table(InputDataSet$ProtoQuestionIDx, InputDataSet$ProtoQuestionIDy, InputDataSet$AnswerPosIDx, InputDataSet$AnswerPosIDy))
  ', @input_data_1 = N'SELECT [SurveyInstanceID], [ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy] FROM  #JoinedSurveys'


OR



    INSERT INTO #CrossTabResults([ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy], [Frequency])
    EXECUTE sp_execute_external_script
  @language =N'R',
  @script=N'
  OutputDataSet <- data.frame(xtabs(~ ProtoQuestionIDx + ProtoQuestionIDy + AnswerPosIDx + AnswerPosIDy, data=InputDataSet))
  ', @input_data_1 = N'SELECT [SurveyInstanceID], [ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy] FROM  #JoinedSurveys'

Я неуверен, что это правильный подход, а также он не улучшает скорость выполнения.Я ищу самое быстрое решение.Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...