考虑这个小示例数据帧(实际数据帧很大):
df <- data.frame(ID=c("C_40", "C_40", "A_301", "A_301", "T_014", "C_4301", "C_4301", "A_345"), genID=c("1", "1", "2", "2", "3","3","4", "4"))
我正在努力解决以下问题: 您会看到始终有2个与genID对应的ID。
“正确”的情况是ID和genID列匹配,因此前2个(C_48为1,A_301为2)。 其他都是“ false”,我需要检测到它们(在此示例中,genID 3具有不匹配的ID = T_014和C_4301; genID4也是一样。
您知道我如何提取这些不匹配案例的方法吗?例如。到仅显示不匹配项的数据帧,例如,如下所示:
ID genID
T_014 3
C_4301 3
C_4301 4
A_345 4
所以我需要相同genID具有不同ID的情况... 谢谢您的任何建议!
答案 0 :(得分:1)
我们根据“ genID”和filter
进行分组,条件是不同的“ ID”的数量等于2。
library(dplyr)
df %>%
group_by(genID) %>%
filter(n_distinct(ID) == 2)
# A tibble: 4 x 2
# Groups: genID [2]
# ID genID
# <fct> <fct>
#1 T_014 3
#2 C_4301 3
#3 C_4301 4
#4 A_345 4
答案 1 :(得分:1)
如果您正在寻找一种适用于大型数据集的非常有效的解决方案,我建议您使用data.table
软件包。此代码段应满足您的需求。
library(data.table)
setDT(df)
unique(df)[, .(ID, count=.N), genID][count>1][, count:=NULL][]
## genID ID
## 1: 3 T_014
## 2: 3 C_4301
## 3: 4 C_4301
## 4: 4 A_345