Как использовать dplyr для вычисления среднего значения столбца? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую dplyr в своем R-скрипте, который вызывается хранимой процедурой SQL Server. Вывод запроса, который я анализирую, выглядит следующим образом:

columnnar responses

Мой R-скрипт и TSQL-запрос на данный момент:

sqlQuerySensory <- "Select
        c.StudyID, c.RespID, c.ProductNumber, c.ProductSequence, c.BottomScaleValue, 
        c.BottomScaleAnchor, c.TopScaleValue, c.TopScaleAnchor, c.StudyDate,
        c.DayOfWeek, c.A, c.B, c.C, c.D, c.E, c.F,
        c.DependentVarYN, c.VariableAttributeID, c.VarAttributeName, c.[1] as c1, 
        c.[2] as c2, c.[3] as c3, c.[4] as c4, c.[5] as c5, c.[6] as c6, c.[7] as c7, c.[8] as c8
        from ClosedStudyResponses c
        --Sensory Value Attributes only for mean and standard deviation analytics.
        where VariableAttributeID = 1
        and c.StudyID = 21"

 x = sqlQuerySensory

 codemean <- function(x) {
   '%>%' = magrittr::'%>%'
   dplyr::group_by(x, .data$code)
   dplyr::summarize_at(dplyr::vars(dplyr::matches("c\\d+")), mean)
   return ()
 }
 result <- codemean(x = x)

 OutputDataSet <- result$x

В интерактивном окне R отображаются следующие ошибки:

Error in UseMethod("group_by_") : 
no applicable method for 'group_by_' applied to an object of class 
"character"
Error: object 'result' not found

Как мне изменить мой сценарий dplyr для получения среднего значения столбца c3 для данного набора ответов?

UPDATE: Я исправил большую часть сценария, используя отзывы о полученных комментариях и документацию. Я также использовал статический StudyID для тестирования и теперь получаю полную сводку по каждому столбцу в моем запросе. Пересмотренный синтаксис TSQL выглядит следующим образом:

ALTER PROCEDURE [dbo].[spCodeMeans]
-- Add the parameters for the stored procedure here
@StudyID int,
@StudyID_outer int OUT


AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
Declare @inquery nvarchar(max) = N'Select
        c.StudyID, c.RespID, c.ProductNumber, c.ProductSequence, c.BottomScaleValue, 
        c.BottomScaleAnchor, c.TopScaleValue, c.TopScaleAnchor, c.StudyDate,
        c.DayOfWeek, c.A, c.B, c.C, c.D, c.E, c.F,
        c.DependentVarYN, c.VariableAttributeID, c.VarAttributeName, c.[1] as c1, 
        c.[2] as c2, c.[3] as c3, c.[4] as c4, c.[5] as c5, c.[6] as c6, c.[7] as c7, c.[8] as c8
        from ClosedStudyResponses c
        --Sensory Value Attributes only for mean and standard deviation analytics.
        where VariableAttributeID = 1
        and c.StudyID = 21'
        ;
BEGIN TRY

        exec sp_execute_external_script
        @language = N'R',
        @script = N'
            OutputDataSet = data.frame(summary(InputDataSet))',
@input_data_1 = @inquery

END TRY

BEGIN CATCH
    THROW;
END CATCH
END

Основываясь на моей вышеописанной хранимой процедуре, как вернуть среднее значение для столбцов с1 по с8, сгруппированных по StudyID?

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