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
3 Réponses :
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
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
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