0
votes

Comment prendre 2 colonnes pour générer une séquence de longueur N et ajouter en tant que colonnes dans R?

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 commentaires

Avez-vous essayé quelque chose jusqu'à présent?


Le moyen le plus simple est s1 = mn, s2 = mn + 1, s3 = mn + 2, s4 = mx 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) au lieu de mn: mx et il devrait fonctionner.


5 Réponses :


1
votes

un moyen d'utiliser : : xxx

ou mapply : xxx


1 commentaires

Eh bien ... Aujourd'hui j'ai appris à propos de la matrice transpose fonction T < / a>.



1
votes

Un dplyr et titsyr Solution pourrait être: xxx

ou: xxx


0 commentaires

2
votes

Une autre option vectorisée utilisant data.table qui devrait être plus rapide sans passer à la ligne par ligne: xxx


à généraliser, TheLateMail a suggéré: < / p> xxx

ou de manière équivalente mais plus longue, mais je pense que ce sera plus rapide: xxx


3 commentaires

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))))]


@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.



1
votes

in data.table , boucle sur mn et mx avec mappe , puis transpose < / Code> et Attribuer : = : xxx


0 commentaires

0
votes

Nous pouvons utiliser map2 xxx


0 commentaires