2
votes

Rechercher le nombre d'occurrences dans différentes variables

J'ai un bloc de données avec des données sur différentes personnes. Ils ressemblent à ceci:

Year Item ID
2005   a   1234
2005   b   1234
2005   a   4567
2005   b   4567
2006   a   4567
2006   a   7894

Mes données contiennent 45 000 observations et environ 1 000 ID différents et 10 années différentes. Je veux trouver les identifiants des personnes qui apparaissent dans plus d'un an, comment faire? J'ai pensé à séparer les données par identifiant et à voir si les données résultantes ont des années différentes, mais cela ne semble pas être le moyen le plus intelligent de le faire

r

0 commentaires

3 Réponses :


1
votes

divisez l ' année par ID , puis ne conservez que les sous-groupes qui ont plus d'un code année code unique >

#DATA
df1 = structure(list(Year = c(2005L, 2005L, 2005L, 2005L, 2006L, 2006L),
                     Item = c("a", "b", "a", "b", "a", "a"), ID = c(1234L, 1234L, 4567L, 4567L, 4567L, 7894L)), 
                class = "data.frame", 
                row.names = c(NA,  -6L))

list1 = lapply(split(df1$Year, df1$ID), unique)
list1 = list1[lengths(list1) > 1]
data.frame(ID = names(list1), count = lengths(list1))
#       ID count
#4567 4567     2


0 commentaires

1
votes

Avec dplyr , nous pouvons utiliser n_distinct et obtenir uniquement ces ID qui ont plus d'un an.

unique(df$ID)[rowSums(table(df$ID, df$Year) > 0) > 1]
#[1] 4567

Une alternative de base R avec table

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(n_distinct(Year) > 1) %>%
  pull(ID) %>%
  unique

#[1] 4567


0 commentaires

1
votes

Nous pouvons obtenir les identifiants dupliqués, puis les récupérer dans ceux-ci:

Dups<-df[duplicated(df$ID),]
 Dups[duplicated(Dups$ID),]["ID"]
 # ID
 # 5 4567


0 commentaires