6
votes

Diviser une image de données en données de données qui se chevauchent

J'essaie d'écrire une fonction qui se comporte comme suit, mais cela se révèle très difficile:

[[1]]
  x y
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e

[[2]]
   x y
1  5 a
2  6 b
3  7 c
4  8 d
5  9 e
6 10 a


10 commentaires

Cette fonction existe donc ou vous ne savez pas comment gérer les cas de bord?


@Chase La fonction n'existe pas. Si je reçois un codé de codé une version de travail (toutefois inélégant), je le posterai.


@Zach est ce Q APROPOS Votre précédent Q? Stackoverflow.com/q/5652058/429846


@Gavin Simpson: Oui, cette question est basée sur mon précédent. Fondamentalement, j'essaie de développer un moyen de paralleraliser la fonction rollApply . Peut-être que je devrais juste demander la question directement?


Remarque 100% sûr que cela va vous aider à y aller alors, vous souhaitez probablement casser les données dans les tailles du morceau que vous souhaitez, 1:31 , 2:32 etc. et etc. les sur vos nœuds - ce que @joris et moi avons fait est divisé les données des sections qui se chevauchent égales et que ce n'est pas vraiment ce que votre rollApply () le code faisait.


@ GAVIN SIMPSON: L'idée est de minimiser la quantité de données que je ressends à mes morceaux, puis exécutez RollApply sur chaque morceau. Par exemple, plutôt que de scinder mes données 1:31 ... sur 100: 131 Il peut avoir plus de sens à la diviser 1:81 et 50: 131 .


@Zach - Je suis avec toi maintenant. Quelle est la taille de votre ensemble de données que vous auriez besoin de le faire et de vérifier de manière importante que cela fonctionne, après l'accélération, j'ai montré à l'aide de lm.fit () ? Problème intéressant cependant.


@Gavin Simpson: Pour le jeu de données que j'ai actuellement, le code LM.FIT () que vous avez écrit fonctionne bien et qu'il y a peu de besoin de parallélisation. Le problème est que, à l'avenir, j'utilise GLM , GLMNET ou d'autres algorithmiques si je constate qu'il donne de meilleurs résultats prédictifs. Par conséquent, j'essaie de trouver un moyen de paralleraliser l'analyse.


@Gavin Simpson: J'ai aussi posé cette question il y a un moment, ce que vous pouvez voir, c'est faire 1:31 2:32 splits adapté à l'agriculture comme vous l'avez décrit. Stackoverflow.com/Questtions/5543387/...


Pensez à propos du vecteur des indices que vous utiliseriez pour sous-ensemble chaque cadre de données - il ne devrait s'agir que de quelques lignes de code


3 Réponses :


7
votes

Essayez quelque chose comme: xxx

avec nsplit le nombre de scissions! (nsplit = 1 renvoie 2 dataframes). Cela rendra un dernier dataframe incomplet au cas où les diviseurs de chevauchement ne correspondent pas vraiment dans le Dataframe et émet un avertissement. xxx

et un avec un avertissement xxx


3 commentaires

+1 belle réponse des premiers principes --- Je suis aussi [paresseux | stupide] * pour les premiers princes. [* Supprimer le cas échéant] ;-)


@ Gavin Simpson: J'ai posté ma propre réponse avec le flux de travail complet que j'ai à l'esprit. Il y a vraiment une place d'amélioration, mais je pense que cela servira mes besoins pour le moment. Merci pour toutes ces suggestions!


@Joris meys comment allez-vous continuer à ne pas inclure les dataframes qui se chevauchent "incomplets" (c'est-à-dire aller un pas plus loin après un avertissement)



4
votes

Ceci utilise l'idée de bardeaux des graphiques de treillis et permet de tirer ainsi des titres du code de l'emballage de réseau pour générer les intervalles, puis utilise une boucle pour casser le DF d'origine dans les sous-ensembles appropriés.

I WASN ' t exactement sûr de ce que l'on entend par chevauchements = 1 - je présume que vous vouliez avoir un chevauchement de 1 échantillon / observation. Si tel est le cas, le code ci-dessous cela. xxx

qui donne: xxx


2 commentaires

Soyez juste prudent avec la définition de chevauchement ; Co.Intervals () veut la fraction de chevauchement pas le nombre absolu de chevauchement des échantillons, donc il pourrait donc y avoir une question à distance dans certaines situations. Si cela se produit et que vous obtenez un ou plusieurs chevauchements supplémentaires que vous le souhaitez


+1 woo-ouais! jamais pensé à pirater le réseau de piratation pour le faire pour moi. Joli



0
votes

Juste pour préciser ce que je fais ici: xxx

de cette manière, vous pouvez remplacer nul à la fin par une version parallèle de la version parallèle et augmenter votre vitesse quelque peu.

Bien sûr, il y a maintenant la question de l'optimisation de la scission / de chevauchement, compte tenu du nombre de processeurs et de la taille de votre ensemble de données.


0 commentaires