1
votes

Supprimer les identifiants contenant moins de 9 observations uniques

J'essaie de filtrer mes données et de supprimer les identifiants contenant moins de 9 observations mensuelles uniques. Je voudrais également créer une liste d'identifiants comprenant le décompte.

J'ai essayé d'utiliser plusieurs options différentes:

count <- bind %>%
  group_by(IDs) %>% 
  filter(length(unique(bind$data.month >=9)))

Aucune de ces options n'a fonctionné.

Voici à quoi mes données ressemblent: p>

IDs  Count
2     12
5     2
7     1
4     12

En fin de compte, je voudrais un ceci:

IDs
2
3

Je voudrais aussi ceci

   data.month   ID
           01    2
           02    2
           03    2
           04    2
           05    2
           05    2
           06    2
           06    2
           07    2
           07    2
           07    2
           07    2
           07    2
           08    2
           09    2
           10    2
           11    2
           12    2
           01    5
           01    5
           02    5
           01    7
           01    7
           01    7
           01    4
           02    4
           03    4
           04    4
           05    4
           05    4
           06    4
           06    4
           07    4
           07    4
           07    4
           07    4
           07    4
           08    4
           09    4
           10    4
           11    4
           12    4

Jusqu'à présent, ce code est le plus proche, mais ne donne encore que des codes d'erreur:

library(dplyr)
count <- bind %>% group_by(IDS) %>% filter(n(data.month)>= 9) %>%       ungroup()
count2 <- subset(bind, with(bind, IDS %in% names(which(table(data.month)>=9))))

Erreur dans filter_impl (.data, quo): La condition de filtre de l'argument 2 ne s'évalue pas comme un vecteur logique


0 commentaires

3 Réponses :


2
votes

Vous pouvez faire avec unique et longueur

df%>%group_by(ID)%>%summarise(Count=length(unique(data.month)))%>%filter(Count>9)%>%select(ID)
# A tibble: 2 x 1
     ID
  <int>
1     2
2     4

Si vous voulez obtenir l'ID

library(dplyr)
df %>% group_by(ID) %>% summarise(Count=length(unique(data.month)))
# A tibble: 4 x 2
     ID Count
  <int> <int>
1     2    12
2     4    12
3     5     2
4     7     1


0 commentaires

1
votes

Nous pouvons utiliser n_distinct

Pour supprimer les ID s avec moins de 9 observations uniques

df %>%
  group_by(ID) %>%
  summarise(count = n_distinct(data.month))


#     ID count
#   <int> <int>
#1     2    12
#2     4    12
#3     5     2
#4     7     1

Ou

df %>%
  group_by(ID) %>%
  filter(n_distinct(data.month) >= 9) %>%
  distinct(ID)

#     ID
#  <int>
#1     2
#2     4

Pour les décomptes uniques de chaque ID

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(n_distinct(data.month) >= 9) %>%
  pull(ID) %>% unique

#[1] 2 4


0 commentaires

0
votes

voici une approche data.table

DT <- fread("data.month   ID
           01    2
            02    2
            03    2
            04    2
            05    2
            05    2
            06    2
            06    2
            07    2
            07    2
            07    2
            07    2
            07    2
            08    2
            09    2
            10    2
            11    2
            12    2
            01    5
            01    5
            02    5
            01    7
            01    7
            01    7
            01    4
            02    4
            03    4
            04    4
            05    4
            05    4
            06    4
            06    4
            07    4
            07    4
            07    4
            07    4
            07    4
            08    4
            09    4
            10    4
            11    4
            12    4")

ID avec 9 observations ou plus

unique(DT, by = c("data.month", "ID"))[, .(counts = .N), by = .(IDs = ID)]
#    IDs counts
# 1:   2     12
# 2:   5      2
# 3:   7      1
# 4:   4     12


0 commentaires