Найти количество вхождений в разных переменных - PullRequest
2 голосов
/ 26 марта 2019

У меня есть фрейм с некоторыми данными о разных людях.Они выглядят так:

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

Мои данные содержат 45000 наблюдений и около 1000 разных идентификаторов и 10 разных лет.Я хочу найти идентификаторы людей, которые появляются более чем через 1 год, как мне это сделать?Я думал о том, чтобы разделить данные по идентификатору и посмотреть, будут ли полученные данные иметь разные годы, но это не самый умный способ сделать это

Ответы [ 3 ]

1 голос
/ 26 марта 2019

С dplyr мы можем использовать n_distinct и получать только те ID, которые имеют более 1 года.

library(dplyr)

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

#[1] 4567

Альтернатива Base R с table

unique(df$ID)[rowSums(table(df$ID, df$Year) > 0) > 1]
#[1] 4567
1 голос
/ 26 марта 2019

Мы можем получить дублированные идентификаторы, а затем получить дубликаты внутри них:

Dups<-df[duplicated(df$ID),]
 Dups[duplicated(Dups$ID),]["ID"]
 # ID
 # 5 4567
1 голос
/ 26 марта 2019

split Year на ID, а затем оставить только те подгруппы, которые имеют более одной уникальной Year

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

#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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...