R - Dplyr - 重复和expand.grid()

时间:2017-03-13 14:21:49

标签: r dplyr

我想删除'重复'来自以下内容:

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(或其他)功能可以帮助解决这个问题?

注意这是一个简化示例,名称向量要长得多。

2 个答案:

答案 0 :(得分:1)

dplyr中,您需要创建另一个关键列,其中对列vw进行排序和粘贴。然后,您可以使用该列上的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