我正在使用R中的数据集,我遇到了一个我无法理解的问题。我的数据目前看起来像这样:
Team Person1 Person2 Person3 Person4 Person5 Person6 Person7
6594794 37505959 37469784 NA NA NA NA NA
6595053 30113392 33080042 21537147 32293683 NA NA NA
6595201 697417 22860111 NA NA NA NA NA
6595380 24432987 32370372 11521625 362790 24432987 22312802 32432267
6595382 12317669 25645492 NA NA NA NA NA
6595444 8114419 236357 32545314 22247108 NA NA NA
6595459 2135269 32332907 32332907 32436550 NA NA NA
6595468 33590928 10905322 32319555 10439608 NA NA NA
6595485 33080810 33162061 NA NA NA NA NA
6595496 36901773 34931641 NA NA NA NA NA
6595523 512193 8747403 NA NA NA NA NA
6595524 32393404 113514 NA NA NA NA NA
6595526 37855554 37855512 NA NA NA NA NA
6595536 18603977 1882599 332261 10969771 712339 2206680 768785
这些列一直延伸到" Person24"。
我所意识到的是,有些团队不止一次列出同一个人。因此,我需要找出一种方法来识别至少列出一个人ID号的团队,并创建所有这些团队ID的完整列表,或者只是从数据集中删除这些团队。
例如,团队#6595380(第4行)有一个重复成员 - 人员#24432987出现在Person1列和Person5列中。另一个例子是团队#6595459(第7行) - 人#32332907出现在Person2列和Person3列中。所以,我要么想要一种方法来记录这样的事件,或者只是从数据集中删除它们。
答案 0 :(得分:3)
Yuo可以使用apply
dat$dups <- apply(dat[-1], 1, function(i) any(duplicated(i[!is.na(i)])))
或Simon O'Hanlon在评论中指出
dat$dups <- apply(dat[-1], 1, function(i) any(duplicated(i, incomparables = NA)))
然后,您可以使用它来查找具有重复项的团队编号或排除它们:
# Return teams that have duplicate person ids
dat$Team[ dat$dups ]
# Exclude rows with duplicates
dat[ ! dat$dups , ]