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