Функция aggregate () в R с суммой - PullRequest
2 голосов
/ 16 октября 2019

Я новичок в R. Я пытаюсь написать код на языке R Script (в пределах Spotfire), чтобы вычислить сумму различных столбцов по дате в моей таблице данных.

Как упоминалось выше, мои данныеВ таблице приведены объемы, записанные в указанные даты для различных продуктов, т.е. нефти, газа и воды для различных скважин. Моя цель состоит в том, чтобы использовать функцию Aggregate в R для суммирования нефти, газа и воды для всех скважин по дате.

В прошлом у меня был успех с приведенным ниже сценарием, который принимает среднее значение для каждого продукта. всех скважин на конкретную дату.

NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=mean))

Когда я пытаюсь изменить функцию из приведенного выше сценария на функцию Sum, я получаю сообщение об ошибке.

NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=sum))

Затем я читаю в другом месте, что, возможно, мне нужно было включить na.rm = TRUE, na.action = NULL) после, чтобы помочь с проблемой, но я все еще получаю сообщение об ошибке ниже.

Could not execute function call.
TIBCO Enterprise Runtime for R returned an error: 'Error in aggregate.data.frame(x[, c("OIL","GAS", "WATER"  : no rows to aggregate
    eval(expr, envir, enclos)
    eval(expr, envir, enclos)
    data.frame(aggregate(x[, c("OIL","GAS", "WATER")],
    aggregate(x[, c("OIL","GAS", "WATER"],
    aggregate.data.frame(x[, c("OIL","GAS", "WATER")],
    stop("no rows to aggregate")'.
   at Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting()
   at Spotfire.Dxp.Data.DataFunctions.Executors.AbstractFunctionClient.<RunFunction>d__31.MoveNext()
   at Spotfire.Dxp.Data.DataFunctions.Executors.SPlusFunctionExecutor.<ExecuteFunction>d__12.MoveNext()
   at Spotfire.Dxp.Data.DataFunctions.DataFunctionExecutorService.<ExecuteFunction>d__3.MoveNext()


Вот мои данные

WELL                          T         OIL GAS WATER 
FILLMORE E4 24-25 3H LWS    10/11/2019  0   0   0
FILLMORE E4 24-25 3H LWS    10/12/2019  197 66  308
FILLMORE E4 24-25 3H LWS    10/13/2019  70  125 1095
FILLMORE E4 24-25 3H LWS    10/14/2019  79  1,211   881
FILLMORE E4 24-25 3H LWS    10/15/2019  0   0   0
FILLMORE E4 24-25 4H LWS    10/11/2019  0   0   0
FILLMORE E4 24-25 4H LWS    10/12/2019  276 90  374
FILLMORE E4 24-25 4H LWS    10/13/2019  47  93  1061
FILLMORE E4 24-25 4H LWS    10/14/2019  53  890 902
FILLMORE E4 24-25 4H LWS    10/15/2019  0   0   0
FILLMORE E4 25-24 1H LWS    10/11/2019  296 262 964
FILLMORE E4 25-24 1H LWS    10/12/2019  465 1,408   1343
FILLMORE E4 25-24 1H LWS    10/13/2019  -690    3,957   1267
FILLMORE E4 25-24 1H LWS    10/14/2019  81  2,093   1133
FILLMORE E4 25-24 1H LWS    10/15/2019  0   0   0

1 Ответ

1 голос
/ 25 октября 2019

Мне кажется, что написание решений для Spotfire очень неудобно, но здесь все идет.

Если вы назвали таблицу 'x', вы можете просто передать таблицу данных в функцию данных с входными параметрами и использовать вашикод как есть. Предполагая типы столбцов: String, Date, Integer, Integer, Integer для 5 столбцов. enter image description here

Выходные параметры называются «NORMALIZED.PRODUCTS». Вам также необходимо запустить функцию и следовать инструкциям для правильного возврата таблицы данных.

Если таблица данных не имеет имени 'x', включите:

x<-yourdatatablename NORMALIZED.PRODUCTS.=data.frame(aggregate(x[,c("OIL","GAS","WATER")],by=list(x[,"T"]),FUN=sum))

enter image description here

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