J'ai une trame de données avec 2 colonnes min et max. Je voulais générer une séquence B / W ces chiffres pour chaque ligne.
>df ID | mn | mx | S1 | s2 | S3 | s4 A 1 10 1 4 7 10 B 2 5 2 3 4 5 C 3 10 3 5.33 7.66 10
5 Réponses :
un moyen d'utiliser code>: code>: ou mapply code>: p>
Eh bien ... Aujourd'hui j'ai appris à propos de la matrice transpose fonction T < / a>.
Un ou: p> dplyr code> et
titsyr code> Solution pourrait être:
Une autre option vectorisée utilisant à généraliser, TheLateMail a suggéré: < / p> ou de manière équivalente mais plus longue, mais je pense que ce sera plus rapide: p> data.table code> qui devrait être plus rapide sans passer à la ligne par ligne:
Nice - j'ai fait une tentative laide de généraliser cette logique: n <- 4; df [ paste0 ("s", SEQ (N)): = Transpose (carte (`+`, mn, n ° ((MX - mn) / (n-1), `*`, SEQ (0, N- 1))))] code>
@THelaTemail Désolé vient de voir votre message ci-dessous. Souhaitez-vous ajouter votre code et je retire du mien?
Nah, tout bon - votre réponse / logique est bien meilleure car elle ne boucle pas sur chaque rangée. Beaucoup plus rapide.
in data.table em>, boucle sur mn code> et
mx code> avec
mappe code>, puis
transpose < / Code> et Attribuer
: = code>:
Nous pouvons utiliser map2 code>
Avez-vous essayé quelque chose jusqu'à présent?
Le moyen le plus simple est
s1 = mn, s2 = mn + 1, s3 = mn + 2, s4 = mx code> si la séquence est exactement comme vous l'avez décrite.
Je peux itération sur chaque ligne et utiliser SEQ (mn, mx, longueur = 4) mais y a-t-il une autre solution efficace
@Frankzhang Et si le nombre de séquences requises est 7?
Vous pouvez modifier l'une des réponses ci-dessous pour utiliser
seq (mn, mx, longueur.out = 4) code> au lieu de
mn: mx code> et il devrait fonctionner.