Comment diviser un bloc de données par lignes, puis traiter les blocs?
J'ai un bloc de données avec plusieurs colonnes, dont l'une est un facteur appelé "site". Comment puis-je diviser le bloc de données dans des blocs de lignes, chacune avec une valeur unique de "site", puis de traiter chaque bloc avec une fonction? Les données ressembler à ceci:
site year peak
ALBEN 5 101529.6
ALBEN 10 117483.4
ALBEN 20 132960.9
ALBEN 50 153251.2
ALBEN 100 168647.8
ALBEN 200 184153.6
ALBEN 500 204866.5
ALDER 5 6561.3
ALDER 10 7897.1
ALDER 20 9208.1
ALDER 50 10949.3
ALDER 100 12287.6
ALDER 200 13650.2
ALDER 500 15493.6
AMERI 5 43656.5
AMERI 10 51475.3
AMERI 20 58854.4
AMERI 50 68233.3
AMERI 100 75135.9
AMERI 200 81908.3
et je veux créer un terrain de year
vs peak
pour chaque site.
source d'informationauteur David Smith
Vous devez vous connecter pour publier un commentaire.
Un autre choix est d'utiliser le
ddply
fonction de laggplot2
de la bibliothèque. Mais vous mentionnez que vous voulons surtout faire un terrain de pic vs l'année, de sorte que vous pourriez tout aussi bien utiliserqplot
:le texte d'alt http://i32.tinypic.com/16nuza.png
D'autre part, je n'aime David Smith, solution qui permet à l'application de la fonction à exécuter sur plusieurs processeurs.
Vous pouvez utiliser
isplit
(à partir de la "itérateurs" package) pour créer un itérateur objet qui passe en boucle sur les blocs définis par l'site
colonne:Ensuite, vous pouvez utiliser
foreach
(à partir de la "foreach" package) pour la création d'une intrigue à l'intérieur de chaque bloc:Comme un bonus, si vous avez une machine multiprocesseur et appel
registerDoMC()
première (à partir de la "ddcm" package), la boucle s'exécutera en parallèle, pour accélérer les choses. Plus de détails dans ce Révolutions post de blog: Bloc-traitement d'une trame de données avec isplitMe semble me rappeler que le bon vieux
split()
a une méthode pour les données.châssis, de sorte quesplit(data,data$site)
serait de produire une liste de blocs. Vous pouvez ensuite fonctionner sur cette liste à l'aide desapply
/lapply
/for
.split()
est aussi agréable en raison deunsplit()
ce qui permettra de créer un vecteur de la même longueur que les données d'origine et dans le bon ordre.Voici ce que je ferais, même si il semble que vous les gars ont été traités par des fonctions de la bibliothèque.
Ce genre de code est plus direct et peut-être moins efficace, mais je préfère être en mesure de lire ce que l'on est en train de faire que d'apprendre quelques nouvelles de la bibliothèque de fonction pour la même chose. fait de ce sentir plus souple aussi, mais en toute honnêteté, c'est juste la façon dont je l'ai compris comme un novice.
Il y a deux pratique intégré dans les fonctions pour gérer ce genre de situations. ?d'agrégation et d' ?par. Dans ce cas, parce que vous voulez une parcelle de terrain et ne sont pas de retour un scalaire, l'utilisation par()
data <- read.table("example.txt",header=TRUE)
by(data[, c('year', 'peak')], data$site, plot)
La sortie dit
NULL
parce que c'est ce qui intrigue les rendements. Vous pouvez définir le périphérique graphique au format pdf pour capturer toutes les données de sortie.Il est également très facile de générer votre parcelles avec le treillis package:
Vous pouvez utiliser le
split
fonctionSi vous avez ouvert vos données:
Après cela, les blocs de données contient des données à partir de chaque bloc, que vous pouvez accéder à d'autres données.cadre:
Et ainsi de suite pour chaque parcelle.