基于唯一配对的子集数据

时间:2018-05-31 05:18:07

标签: r subset

我有一个如下所示的数据框(x):

Value<-c(FALSE, TRUE, FALSE, TRUE, FALSE)
Allele<-c('a','a','a','b','b')
Match<-c('b','b','c','b','b')

我想对数据进行子集化,以便它只输出Allele和Match之间的对不会出现多次的值。在上面的数据集中,它只输出:false,a,b

我试过了:

x[!duplicated("Allele","Match"),]

但它并没有删除在两列中具有多个匹配示例的对 - 它提供与x相同的输出。有什么建议?谢谢!

2 个答案:

答案 0 :(得分:2)

我们还需要从背面考虑duplicated

x[!(duplicated(x[-1])|duplicated(x[-1], fromLast = TRUE)),]
#   Value Allele Match
#3 FALSE      a     c

此外,通过引用列名称在OP代码中的语法将不起作用。我们需要对数据集进行子集化

x[c("Allele", "Match")]

然后在列子集

上应用duplicated
duplicated(x[c("Allele", "Match")])

数据

x <- data.frame(Value, Allele, Match)

答案 1 :(得分:1)

您可以对Allele, Match进行分组,并删除包含多于一行的组行。使用dplyr的解决方案可以是:

library(dplyr)

x %>% group_by(Allele, Match) %>%
  filter(n()<2) %>%
  as.data.frame()

#   Value Allele Match
# 1 FALSE      a     c

数据:

Value<-c(FALSE, TRUE, FALSE, TRUE, FALSE)
Allele<-c("a","a","a","b","b")
Match<-c("b","b","c","b","b")

x <- data.frame(Value, Allele, Match, stringsAsFactors = FALSE)