Dans le jeu de données Matrix suivant:
1 2 3 4 5 1950 7 20 21 15 61 1951 2 10 6 26 57 1952 12 27 43 37 34 1953 14 16 40 47 94 1954 2 17 62 113 101 1955 3 4 43 99 148 1956 2 47 31 85 79 1957 17 5 38 216 228 1958 11 20 15 76 68 1959 16 20 43 30 226 1960 9 28 28 70 201 1961 1 31 124 74 137 1962 12 25 37 41 200
4 Réponses :
par code> est une option:
Il pourrait y avoir une solution de base plus élégante, mais cela fonctionne.
# Construct a nicely named vector with which to split your data.frame breaks <- seq(1950, 2000, by=10) names <- c("50's", "60's", "70's", "80's", "90's") decade <- cut(as.numeric(row.names(df)), seq(1950, 2000, by=10), labels=names, right=FALSE) # by() splits df apart, operating on each of its pieces. # do.call(rbind, ...) sutures the results back together. do.call(rbind, by(df, decade, colSums)) # X1 X2 X3 X4 X5 # 50's 86 186 342 744 1096 # 60's 22 84 189 185 538
Nous configurons d'abord la matrice utilisée comme entrée.
t(sapply(split(as.data.frame(m), decade), colSums))
+1 pour rowsum () code>. Merci d'élargir votre réponse pour inclure ces options supplémentaires.
Vous devez d'abord définir une variable de regroupement, vous pouvez utiliser votre outil de choix ( agrégat code>,
ddply code>, quoi que ce soit).
> aggregate(x, by=list(trunc(as.numeric(rownames(x))/10)), sum)
Group.1 X1 X2 X3 X4 X5
1 195 86 186 342 744 1096
2 196 22 84 189 185 538
C'est ce que je voulais dire par "plus élégant". Très agréable.