R: en boucle par le biais de bloc de données, extraction de sous-ensemble de données en fonction de la date
J'ai un gros bloc de données qui se compose de données qui ressemble à quelque chose comme ceci:
date w x y z region
1 2012 01 21 43 12 3 NORTH
2 2012 02 32 54 21 16 NORTH
3 2012 03 14 32 65 32 NORTH
4 2012 04 65 33 75 21 NORTH
: : : : : : :
: : : : : : :
12 2012 12 32 58 53 17 NORTH
13 2012 01 12 47 43 23 SOUTH
14 2012 02 87 43 21 76 SOUTH
: : : : : : :
25 2012 01 12 46 84 29 EAST
26 2012 02 85 29 90 12 EAST
: : : : : : :
: : : : : : :
Je veux extraire de la section des données qui ont le même date
valeur, par exemple de le faire juste pour 2012 01
je voudrais juste créer un sous-ensemble de données
data_1 <- subset(data, date == "2012 01")
et cela me donne toutes les données pour 2012 01
, mais je puis continuer à appliquer une fonction à ces données. Je voudrais être en mesure d'appliquer ma fonction à tous les sous-ensembles possibles de mes données, donc, idéalement, je voudrais être une boucle dans ma grande trame de données et d'en extraire les données pour 2012 01, 2012 02, 2012 03, 2012 04...
et l'application d'une fonction à chacun de ces sous-ensembles de données séparément.
Mais je voudrais être en mesure de l'appliquer à ma trame de données, même si mon trames de données de longueur étaient à changer, donc il ne peut pas toujours aller de 2012 01 - 2012 12
, la plage de dates peuvent varier de sorte que, parfois, il peut être utilisé sur des données provenant par exemple 2011 03 - 2013 01
.
Vous devez vous connecter pour publier un commentaire.
est-ce que vous souhaitez ?
df_list <- split(data, as.factor(data$date))
En boucle sur chaque unique de la date et de construire le sous-ensemble.
data_1
et puis, l'utilisateur peut s'appliquer quelle que soit la fonction du dataframe et de choisir eux-mêmes l'endroit où stocker les résultats.Après le sous-paramètre de votre jeu de données par jour, imaginez que la fonction que vous souhaitez appliquer à chaque sous-ensemble est de trouver la moyenne de la colonne
x
. Vous pourriez faire de cette façon: (df est votre dataframe)Vous pouvez diviser votre
data.frame
dans unlist
dedata.frames
comme ceci:C'est une situation parfaite pour les
plyr
package:où
my_function
est la fonction que vous souhaitez effectuer sur la répartition des trames de données, etextra_arg
s sont tout d'arguments supplémentaires qui doivent aller à la fonction.ddply
(d
ata image ->d
ata frame) est la forme que vous voulez si vous voulez que vos résultats dans un bloc de données;dlply
renvoie une liste.