J'ai tout de suite donner un exemple, Supposons maintenant que j'ai 3 tableaux A, B, C tels que
c(1,2,3),c(4,5,6)
4 Réponses :
Voici une approche. Cela suppose qu'il n'y a pas de pauses dans la séquence d'observations dans le nombre de groupes. Ici, les données.
lapply(which(idx), function(i) { dd[i:(i+N-1),] }) # [[1]] # data which # b2 1 b # c2 2 c # a1 3 a # # [[2]] # data which # c1 4 c # a2 5 a # b1 6 b
Cela a parfaitement travaillé pour l'exemple donné. Mais pourriez-vous m'aider à former un groupe comme je n'ai 'n' nombre de tableaux, tout comme une liste dans une liste.
Voici une méthode de force brute avec à l'aide de expand.grid code> et trois vecteurs comme dans l'exemple
COMMUN code> pour calculer la différence Pour chaque combinaison paires. p>
Vous avez des idées pour réussir la méthode «N» dans expand.grid ()?
Je viens d'essayer et expand.grid code> acceptera une liste de vecteurs. Vous pouvez collecter les vecteurs dans une liste à l'aide de
mget code> et
ls code>. Jouez autour de ma réponse à Cet article à construire une telle liste.
Réorganiser les données d'abord dans une liste contenant le numéro de valeur et de tableau.
Trier la liste; Vous auriez une smth comme: en boucle de la liste, vérifiez s'il y a des numéros consécutifs réellement, puis vérifiez si ceux-ci avaient des numéros de tableau différents P> P>
Grande idée (avancée), il pourrait y avoir une seule difficulté si le même numéro est dans plusieurs vecteurs, mais il est facile d'adapter la solution à rendre compte de cela :)
J'ai piraté une petite fonction récursive qui trouvera tous les triplets consécutifs entre autant de vecteurs que vous le transmettez (devez passer au moins trois). C'est probablement un peu brut, mais semble travailler.
La fonction utilise l'ellipsis, Ensuite, les indeces des vecteurs correspondant au plus petit triplet sont créés et itératés à l'aide d'une boucle la fonction peut être appelé en passant les vecteurs d'entrée comme arguments. p> Le résultat est une liste, qui contient toutes les informations nécessaires, bien que non ordonnées. P> ... code>, pour les arguments de passage. Par conséquent, il faudra toutefois de nombreux arguments (c'est-à-dire des vecteurs numériques) que vous fournissez et les mettre dans la liste
éléments code>. Ensuite, la plus petite valeur parmi chaque vecteur passé est située, avec son index. p>
pour () code>, où les valeurs de sortie sont transmises au vecteur de sortie
out code>. Les vecteurs d'entrée dans
éléments code> sont éliminés et passés à nouveau dans la fonction de manière récursive.
Seulement, lorsque tous les vecteurs sont
na code>, c'est-à-dire qu'il n'y a plus de valeurs dans les vecteurs, la fonction renvoie le résultat final. P>
a<-c(6,7,11)
b<-c(8,9,13)
c<-c(10,12,14)
y <- tripl(a,b,c)
sapply(y, function(x){x[order(x)]}) %>% t
# [,1] [,2] [,3]
# [1,] 6 8 10
# [2,] 7 9 12
# [3,] 11 13 14
Chaque élément d'un triplet est-il à venir de différents tableaux?
{2,3,4} code> être considéré comme un triplet valide?
Oui! , {2,3,4}, {6,7,8} ou {7,8,9} n'est pas valide.