dplyr 的可能性可能是:
mydf %>%
group_by(grp = paste(pmax(gene_x, gene_y), pmin(gene_x, gene_y), sep = "_")) %>%
slice(1) %>%
ungroup() %>%
select(-grp)
gene_x gene_y
<chr> <chr>
1 AT1 AT2
2 AT1 AT3
3 AT3 AT4
或者:
mydf %>%
group_by(grp = paste(pmax(gene_x, gene_y), pmin(gene_x, gene_y), sep = "_")) %>%
filter(row_number() == 1) %>%
ungroup() %>%
select(-grp)
或者:
mydf %>%
group_by(grp = paste(pmax(gene_x, gene_y), pmin(gene_x, gene_y), sep = "_")) %>%
distinct(grp, .keep_all = TRUE) %>%
ungroup() %>%
select(-grp)
或者使用dplyr和purrr:
mydf %>%
group_by(grp = paste(invoke(pmax, .), invoke(pmin, .), sep = "_")) %>%
slice(1) %>%
ungroup() %>%
select(-grp)
从purrr 0.3.0 invoke() 退休后,应使用exec() 代替:
mydf %>%
group_by(grp = paste(exec(pmax, !!!.), exec(pmin, !!!.), sep = "_")) %>%
slice(1) %>%
ungroup() %>%
select(-grp)
或者:
df %>%
rowwise() %>%
mutate(grp = paste(sort(c(gene_x, gene_y)), collapse = "_")) %>%
group_by(grp) %>%
slice(1) %>%
ungroup() %>%
select(-grp)