0
votes

Incrément Indicateur Colonne dans R

J'ai des données ci-dessous et j'essaie de créer une colonne indicatrice pour conserver une piste d'incrément de la valeur par ID. XXX PRE>

L'ordre de la date compte ici. p> xxx pré>

sortie souhaitée p> xxx pré>

données d'entrée mise à jour - p> xxx pré>

mise à jour Sortie - P>

      id   rank  dates       new

 1     1     1 2019-06-15     0
 2     1     2 2019-07-10     1
 3     1     3 2019-08-15     1
 4     1     1 2019-09-15     1
 5     1     1 2019-10-15     1
 6     1     1 2019-11-15     1
 7     1     2 2019-12-15     1
 8     2     2 2019-10-15     0
 9     2     3 2019-11-15     1
10     2     1 2019-12-15     1
11     3     1 2019-11-15     0
12     3     2 2019-12-15     1
13     4     3 2019-12-15     0
14     5     1 2019-10-15     0
15     5     1 2019-11-15     0
16     5     1 2019-12-15     0


5 commentaires

C'est-à-dire que la première ligne de chaque ID doit être 0 et toutes les autres valeurs de la colonne new_col doit être 1 Indépendamment des valeurs des colonnes Rank et dates , est-ce correct?


@Rushabhpatel pas clair pourquoi 14 et 15ème sont tous les deux 0. Il y a une date de changement de 2019-11-15 à 2019-12-15


@akrun je m'excuse que c'était la faute de frappe. Je l'ai mis à jour


S'il vous plaît vérifier ma mise à jour


Si l'interprétation de Markus est correcte, vous pouvez utiliser setdt (df) [ nouveau: = remplacer (rep (1L, .n), rleid (rang) == 1L, 0L), id]


3 Réponses :


1
votes

Assumer que votre trame de données est triée comme vous le souhaitez, voici une solution à l'aide de la base R:

df$new_col_2 = c(0, 1 - diff(df$id))

> df
   id rank      dates new_col new_col_2
1   1    1 2019-06-15       0         0
2   1    2 2019-07-15       1         1
3   1    3 2019-08-15       1         1
4   1    1 2019-09-15       1         1
5   1    1 2019-10-15       1         1
6   1    1 2019-11-15       1         1
7   1    2 2019-12-15       1         1
8   2    2 2019-10-15       0         0
9   2    3 2019-11-15       1         1
10  2    1 2019-12-15       1         1
11  3    1 2019-11-15       0         0
12  3    2 2019-12-15       1         1
13  4    3 2019-12-15       0         0


0 commentaires

2
votes

Nous pouvons utiliser diff sur les "dates" après le regroupement par "id" xxx

update xxx < / p>


4 commentaires

Cela suppose que toutes les dates sont séparées d'une journée. Est-ce le cas?


@Icecreamtoucan C'est un code de mise à jour. Je n'ai pas initialement eu le vecteur logique


@akrun Cela devrait être basé sur le rang. Votre code échoue pour les données d'échantillonnage mis à jour.


@akrun s'il vous plaît vérifier maintenant.



2
votes

Vous pouvez utiliser rep et organiser également les dates, comme vous avez dit qu'ils étaient importants: xxx


0 commentaires