2017-08-10 108 views
0

我有数据与人名和他们的ID号列表。并非所有具有相同名称的人都有相同的ID号码,但名称不同的每个人都应具有不同的ID号。像这样:R ID错误检查(不同的名称,相同的ID)

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

ID  1  1 2 2 2 3 4 5 6 7 8 

我需要确保这些ID是正确的。因此,我想编写一个代码,只有在ID号相同但名称不同的情况下才显示为“子集”(所以我将仅对ID错误进行子集化)。我甚至不知道从哪里开始的这一点,因为我试过

df1<-df(subset(duplicated(df$Name) & duplicated(df$ID))) 
Error in subset.default(duplicated(df$officer) & duplicated(df$ID)) : 
    argument "subset" is missing, with no default 

,但它没有工作,我知道这并不让R能够匹配和比较姓名和身份证号码。

非常感谢你提前。

回答

0

下面

在这里的评论信息更新是一些测试数据:

> DF <- data.frame(name = c("A", "A", "A", "B", "B", "C"), id=c(1,1,2,3,4,4)) 
> DF 
    name id 
1 A 1 
2 A 1 
3 A 2 
4 B 3 
5 B 4 
6 C 4 

所以......如果我正确理解你的问题,你想要得到的信息,有与问题由于两个不同的名称(B和C)出现在该ID上,因此为4。

library(dplyr) 
DF %>% group_by(id) %>% distinct(name) %>% tally() 
# A tibble: 4 x 2 
    id  n 
    <dbl> <int> 
1  1  1 
2  2  1 
3  3  1 
4  4  2 

在这里我们得到了一个总结,并看到有对id 4.您可以结合起来,与filter只看到了IDS与一个以上的名称

> DF %>% group_by(id) %>% distinct(name) %>% tally() %>% filter(n > 1) 
# A tibble: 1 x 2 
    id  n 
    <dbl> <int> 
1  4  2 

两个不同的名字(n)这有帮助吗?

+0

你是对的!我搞乱了子集命令,但是我写下的命令并没有完全按照我想要的那样去做。当我运行该命令时,它给了我整个数据集 - 不仅仅是具有不同名称和相同ID号的数据集。 :( – Rachel

+0

对不起,我正在努力格式化数据以匹配本网站的格式!!!!上面的例子我很好 - 如果我的子集,结果应该是0意见。如果约翰的ID是3和Chris的ID也是3,然后它就成了一个问题,我需要知道在我的数据集中有多少人(名字不同但姓名相同的人)(我发现了一对夫妇,在数据) – Rachel

+0

是的!!!它的工作!非常感谢你!你是非常聪明! – Rachel