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