Puisque vous dites que votre cadre de données est assez grand, vous pouvez convertir votre trame de données en un objet data.table en utilisant le package data.table. Vous trouverez probablement que les opérations requises sont beaucoup plus rapides si vous avez un grand nombre de lignes. Cependant, la construction du code pour votre cas n'est pas simple avec data.table.
Si j'understnad ce que vous voulez faire (ce qui est pas tout à fait clair pour moi), vous pouvez essayer ce qui suit:
library(data.table)
z <- c(0,1,2,3,4,5)
y <- c(2,2,2,3,3,3)
a <- c(1,1,1,2,2,2)
x <- data.frame(z,y,a)
xx <- as.data.table(x) # Make a data.table object
setkey(xx, z) # Make the z column a key
xx[1, sum(a)] # Sum all values in column a where the key z = 1
[1] 1
# Now try the other sum you mention
xx[, sum(z), by = list(z = y)] # A column sum over groups defined by z = y
z V1
1: 2 2
2: 3 3
sum(xx[, sum(z), by = list(z = y)][, V1]) # Summing over the sums for each group should do it
[1] 5
Pour créer la somme sur la colonne a où z = 1, je pris la z colonne une clé. La syntaxe xx [1, sum (a)] somme a où la valeur de clé (valeur z) est 1.
Je peux créer des groupes avec l'objet data.table avec by, qui est analogue à une clause SQL WHERE si vous connaissez SQL. Cependant, le résultat est la somme de la colonne z pour chacun des groupes créés. Cela peut être inefficace si vous avez un grand nombre de valeurs de correspondance possibles où z = y. La somme externe ajoute les valeurs de chaque groupe dans la colonne V1 sous-sélectionnée du résultat interne.
Si vous utilisez sérieusement data.table, étudiez les vignettes informatives disponibles pour ce package.
M Dowle, T Court-métrage, S Lianoglou, A Srinivasan avec des contributions de R Saporta et E Antonyan (2014). data.table: Extensions de data.frame. R paquet version 1.9.2. http://CRAN.R-project.org/package=data.table
Pouvez-vous également inclure un échantillon de la sortie désirée? C'est difficile à comprendre à partir de l'énoncé du problème. – ilir