我的数据包含人名和他们的ID号列表。并非所有具有相同名称的人都具有相同的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匹配并比较名称和ID号。
提前非常感谢你。
答案 0 :(得分: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
所以...如果我正确理解你的问题,你想得到id 4有问题的信息,因为这个id出现了两个不同的名字(B和C)。
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
在这里,我们得到一个摘要,看到n
有两个不同的名称(id
)4。您可以将其与filter
结合使用,只能看到有多个ID的ID名称
> DF %>% group_by(id) %>% distinct(name) %>% tally() %>% filter(n > 1)
# A tibble: 1 x 2
id n
<dbl> <int>
1 4 2
这有帮助吗?