查找不同变量中的出现次数

时间:2019-03-26 02:33:13

标签: r

我有一个数据框,其中包含有关不同人的一些数据。他们看起来像这样:

Register-EngineEvent

我的数据有45000个观测值,大约1000个不同的ID和10个不同的年份。我想查找出现超过1年的人员的身份证,我该怎么做?我曾想过通过ID分离数据,然后看看结果数据是否有不同的年份,但这似乎并不是最聪明的方法

3 个答案:

答案 0 :(得分:1)

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))

答案 1 :(得分:1)

使用dplyr,我们可以使用n_distinct并仅获得拥有超过1年的ID

library(dplyr)

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

#[1] 4567

带有table

的基本R替代
unique(df$ID)[rowSums(table(df$ID, df$Year) > 0) > 1]
#[1] 4567

答案 2 :(得分:1)

我们可以获取重复的ID,然后在其中重复:

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