Maintenant, j'ai un bloc de données de plusieurs colonnes, qui contient l'id, le nombre de semaines, ... Et je veux comparer le nombre de semaines dans chaque id et sortir la semaine consécutive. Le bloc de données ressemble à ceci:
entrez la description de l'image ici

Le problème est que si je veux sélectionner les lignes spécifiques avec au moins 2 semaines consécutives dans un identifiant spécifique, comment dois-je implémenter l'instruction conditionnelle dans group_by (id)?

La sortie doit être entrez la description de l'image ici

Maintenant, mon idée est d'utiliser group_modify () ou group_map ()

r
0
Drick 14 mars 2021 à 22:03

1 réponse

Meilleure réponse

Dans cid, l'expression semaine_num - 1: n () transformera les séquences en valeurs constantes afin que nous puissions regrouper par cid et cette expression et extraire toutes celles avec plus d'une ligne.

library(dplyr)

DF %>%
  group_by(cid) %>%
  group_by(w = week_num -  1:n(), .add = TRUE) %>%
  filter(n() > 1) %>%
  ungroup %>%
  select(-w)

Donnant:

# A tibble: 4 x 2
    cid week_num
  <dbl>    <dbl>
1     3       13
2     3       14
3     3       46
4     3       47

Remarque

DF <- data.frame(cid = c(1, 2, 3, 3, 3, 3, 3),
  week_num = c(1, 2, 1, 13, 14, 46, 47))
1
G. Grothendieck 14 mars 2021 à 19:22