2 votes

Fonction aggregate() en R avec sum

Je suis un débutant en R. J'essaie d'écrire un code en R script (dans Spotfire) pour calculer la somme de différentes colonnes par date dans mon tableau de données.

Comme mentionné ci-dessus, mon tableau de données répertorie les volumes enregistrés à des dates données pour différents produits, c'est-à-dire le pétrole, le gaz et l'eau, pour différents puits. Mon objectif est d'utiliser la fonction Aggregate de R pour faire la somme du pétrole, du gaz et de l'eau pour tous les puits par date.

Dans le passé, j'ai obtenu de bons résultats avec le script suivant, qui calcule la moyenne de chaque produit de tous les puits pour une date donnée.

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

Lorsque j'essaie de remplacer la fonction dans le script ci-dessus par la fonction Sum, j'obtiens une erreur.

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

J'ai ensuite lu ailleurs que je devais peut-être inclure na.rm = TRUE , na.action = NULL) après avoir résolu le problème, mais je reçois toujours l'erreur ci-dessous.

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()

Voici ma table de données

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

1voto

ngwells Points 168

J'ai l'impression qu'écrire des solutions pour Spotfire est très maladroit, mais c'est ainsi.

Si vous avez nommé le tableau "x", vous pouvez simplement passer le tableau de données dans une fonction de données avec les paramètres d'entrée et utiliser votre code tel quel. En supposant que les types de colonnes soient String, Date, Integer, Integer, Integer pour les 5 colonnes. enter image description here

Les paramètres de sortie sont appelés "NORMALIZED.PRODUCTS". Vous devez également exécuter la fonction et suivre les instructions pour renvoyer correctement le tableau de données.

Si le tableau de données n'est pas nommé "x", inclure :

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

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X