重复ID检查

时间:2017-08-10 20:28:09

标签: r

我的数据包含人名和他们的身份证号码。有些人被列出两次或三次。每个人都有一个身份证号码 - 如果他们被列出不止一次,只要是同一个人,他们的身份证号码就会保持不变。像这样:

Name  david david john john john john megan bill barbara chris chris

ID     1      1    2    2    2    2   3    4    5   6   6  

我需要确保这些ID号是正确的,并且不同的人没有相同的ID号。在这样做时,我想创建一个新的变量来分配新的ID号,以便我可以将新的ID号与旧的ID号进行比较。我想创建一个说明的命令 "如果他们的名字相同,请使他们的身份证号码相同"。 我该怎么做呢?这有意义吗?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,其中一些是上面提到的。我通常使用dplyr版本来发现并删除重复/不良案例。以下是一个具有各种输出的示例,具体取决于您的目标。

library(dplyr)

# example with one bad case
dt = data.frame(Name = c("david","davud","John","John","megan"),
                ID = c(1,1,2,3,3), stringsAsFactors = F)


# spot names with more than 1 unique IDs
dt %>%
  group_by(Name) %>%
  summarise(NumIDs = n_distinct(ID)) %>%
  filter(NumIDs > 1)

# # A tibble: 1 x 2
#    Name NumIDs
#   <chr>  <int>
# 1  John      2


# spot names with more than 1 unique IDs and the actual IDs
dt %>%
  group_by(Name) %>%
  mutate(NumIDs = n_distinct(ID)) %>%
  filter(NumIDs > 1) %>%
  ungroup()

# # A tibble: 2 x 3
#    Name    ID NumIDs
#   <chr> <dbl>  <int>
# 1  John     2      2
# 2  John     3      2


# spot names with more than 1 unique IDs and the actual IDs - alternative
dt %>%
  group_by(Name) %>%
  mutate(NumIDs = n_distinct(ID)) %>%
  filter(NumIDs > 1) %>%
  group_by(Name, NumIDs) %>%
  summarise(IDs = paste0(ID, collapse=",")) %>%
  ungroup()

# # A tibble: 1 x 3
#      Name NumIDs   IDs
#     <chr>  <int> <chr>
#   1  John      2   2,3