Je veux agréger trame de données f
dans une nouvelle trame de données g
de telle sorte que la colonne g$z
contient une liste de toutes les valeurs de la colonne sage groupe f$z
. A première vue, cela semble fonctionner:Faire des calculs sur les listes à l'intérieur de trames de données
f = data.frame(x=c(1, 1, 1, 2), y=c(4, 4, 5, 6), z=c(11, 12, 13, 14))
g = aggregate(z ~ x + y, f, c)
x y z
1 1 4 11, 12
2 1 5 13
3 2 6 14
Maintenant, je veux faire différents calculs sur les listes dans la colonne c
pour toutes les lignes de la trame de données et le résultat dans les nouvelles colonnes dans la même trame de données. Mais ça ne marche pas!
g$m = sum(g$z)
g$n = g$z + 1
Error in sum(g$z) : invalid 'type' (list) of argument
Comment puis-je travailler avec des listes dans une cellule de bloc de données comme essayé ci-dessus? Ou est-ce simplement un-R-like/impossible? Si oui, quelle est la bonne approche?
MISE À JOUR
Mon objectif sous-jacent est de faire un grand nombre d'opérations par groupes sur toutes les combinaisons de X et Y dans l'ensemble de données d'origine. Quelles options ai-je pour cela dans R en général?
- Utilisez
apply
. Pro: Tout dans une table. Con: structure de table complexe, ne peut pas utilisersum
etc. - pour (y), pour (x), sous-ensemble. Pro: Peut faire
sum
etc. directement. Con: Beaucoup de code, et peut-être lent. - Travailler en parallèle avec table originale et agrégée. Pro: Peut faire
sum
etc. Con: La duplication de données. - Autres options?
'spply' pour' g $ m', comme ci-dessous. Et 'g $ n <- relist (unlist (g $ z) + 1, g $ z)' –