我有一个如下所示的数据框(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相同的输出。有什么建议?谢谢!
答案 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)