我想删除'重复'来自以下内容:
v <- c('Jasper', 'Alice')
w <- c('Jasper', 'Alice')
vw <- expand.grid(v = v, w = w)
为了简单起见,我过滤了结果,不包括v和w相等的行。像这样:
vw <- vw %>% filter(v != w)
结果是2x2 data.frame
。运行代码时,第一行和第二行的v和w值被反转 - Jasper Alice而不是Alice Jasper。虽然严格来说它们不是重复的,但我还是要考虑它们。换句话说,我只想保留其中一个。我尝试使用duplicated()
功能,但我无法使其正常工作。是否有dplyr
(或其他)功能可以帮助解决这个问题?
注意这是一个简化示例,名称向量要长得多。
答案 0 :(得分:1)
在dplyr
中,您需要创建另一个关键列,其中对列v
和w
进行排序和粘贴。然后,您可以使用该列上的distinct(key)
仅保留一个。添加%>% select(v,w)
以仅获取您的原始列。
vw %>%
filter(v != w) %>%
mutate(key = paste0(pmin(v, w), pmax(v, w), sep = ""))%>%
distinct(key)
v w key
1 Alice Jasper AliceJasper
答案 1 :(得分:0)
在基础R中,您可以按行apply
排序,然后使用duplicated
:
vw <- expand.grid(v = v, w = w, stringsAsFactors = F)
vw[!duplicated(t(apply(vw, 1, sort))),]
v w
1 Jasper Jasper
2 Alice Jasper
4 Alice Alice